Excel VBA "Automation Error" 由于 2016 年 1 月 Office 更新,可能由 MSCOMCTL.OCX(Microsoft Windows 通用控件 6.o(Service Pack 6))引起
Excel VBA "Automation Error" due to Jan 2016 Office Update, probably caused by MSCOMCTL.OCX (Microsoft Windows Common Controls 6.o (Service Pack 6))
解决方案
我使用 Microsoft Windows Common Controls 6.0 (Service Pack 6) 添加了一个 Treeview Active X 控件到我们的电子表格之一,即 MSCOMCTL.OCX
位于 C:\Windows\SysWOW64\
KB2881029(Microsoft Office 2010 32 位版本的安全更新)(MS16-004),于 2016 年 1 月 15 日(或前后)从 Microsoft 推出,安装新版本的 MSCOMCTL.OCX
( v6.1.98.46) 在 2015 年 12 月 9 日是 "Created",但在更新时是 "Accessed"(即安装在计算机上)。
这使得工作簿 "lose" 引用了 MSCOMCTL.OCX
("lose" 上的引号,因为引用仍然被勾选但不再有效;工作簿无法编译,因为"Compile error: Object library feature not supported" 或 "Automation error").
似乎更新通过添加 SubKey 2.0 修改了以下注册表项,但将其留空,并且没有注册新的 MSCOMCTL.OCX
:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}\
解决问题需要三个步骤:
MSCOMCTL.OCX
需要从提升的命令提示符中取消注册和 re-registered,如下所示:
C:\Windows\system32>Regsvr32 /u C:\Windows\SysWOW64\MSCOMCTL.OCX
C:\Windows\system32>Regsvr32 C:\Windows\SysWOW64\MSCOMCTL.OCX
通过 REGSVR32 注册新的 MSCOMCTL.OCX
(版本 6.1.98.46)时,注册表中添加了一个新密钥:
KEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}.2
如果已经存在名为2.1 的SubKey,则输入一个引用,即2.2 现在是要使用的Key。但它对空的 2.0 SubKey 没有任何作用!
如果有一个 2.0(或 2.1 就此而言)SubKey 没有任何内容,任何使用该 OCX 的 object 都应该无法创建,因为它将使用 2.0(resp 2.1)版本,它可以't 也没有检查 2.2 版本。
通过删除错误或被取代的键 2.0 和 2.1 清理注册表,只留下最新的工作键 2.2。这可以通过 selecting HKEY_CLASSES_ROOT、Edit/Find/MSCOMCTRL.OCX.
从注册表编辑器完成
(注意:这一步似乎是可选的,因为我已经检查过只执行第 1 步和第 3 步会使工作簿再次工作。但感觉这是正确的做法)
在 Excel 工作簿 VBA 项目中,需要取消引用 Microsoft Windows Common Controls 6.0 (Service Pack 6) 并且 re-referenced. Re-referencing不只是re-ticking盒子的问题,需要用到"Browse",selectMSCOMCTL.OCX
在C:\Windows\SysWOW64\
(注意,在浏览器window中,您需要将文件类型从"dll"更改为"OCX"(或"all"))
Daniel Alexander Karr(请参阅下文 post)友善地分享了他编写的自动执行步骤 1 和 2 的脚本(注意需要 运行 作为管理员)。
感谢 Daniel 和 wmelonman 帮助您理解问题并找到解决方案。
原版Post
与这个 3 岁孩子描述的相似 post
(VBA Automation Errors due to Office Service Pack 3.0 caused by Forms),我的一本完美工作簿一天又一天停止工作...
在昨晚执行的更新列表中,以下是 Office 更新:
- KB3114563(Microsoft Office 2010 32 位版本的定义更新)
- KB2881029(Microsoft Office 2010 32 位版本的安全更新)
- KB3114555(Microsoft Office 2010 32 位版本更新)
- KB3114553(Microsoft Office 2010 32 位版本的安全更新)
- KB3114564(Microsoft Excel 2010 32 位版本的安全更新)
还有其他更新,但一般的 Microsoft Windows 更新,并非特定于 Office,希望它们与此处无关。
我的理解是 "Automation error" 是由于项目没有编译,因为我从 Microsoft Windows Common Controls 6.0 (Service Pack 6),即位于 C:\Windows\SysWOW64\
中的 MSCOMCTL.OCX
不幸的是un-registering和re-registeringMSCOMCTL.OCX
as explained in the aforementioned post没有解决问题。
我也尝试删除所有 *.exd
,但我的 C:
驱动器上没有。
可能相关的其他信息:
MSCOMCTL.OCX
文件版本为 6.1.98.46
,创建和最后修改时间为 2015-12-09,但在昨天(2016-01-15)凌晨 3 点 33 分访问,即更新时间大致相同发生(最近一次是凌晨 3:14)。
- 一旦通过初始 "automation error" 消息,我将收到一条附加消息 "Compile error: Object library feature not supported",突出显示与附加控件关联的代码行。
- 我已经通过创建空白表单并尝试添加一个来验证这些是 "causing" 问题。我收到错误消息 "Could not complete the operation due to error 800a0011"。
- 这些附加控件是 Microsoft TreeView Control 6.0 (SP6) 和 Microsoft ImageList Control 6 (SP6)。
- 我可以添加 Microsoft TreeView 控件 5.0 版 (SP2) 和 Microsoft ImageList 控件 5.0 版 (SP2) 而不会引发错误(尽管我没有尝试让它们工作)。
有谁知道 MSCOMCTL.OCX
在昨天的 Microsoft 更新后发生了类似的事故?这可能证实它可能是我的问题的根源。
有人知道修复方法吗?
有谁知道如何向 Microsoft 报告此问题(如果确实是问题的根源)?
最后,对于那些感兴趣的人,有一种方法可以避免 Microsoft 更新弄乱 ActiveX 控件...不使用它们!这就是 JPK 为他的 TreeView.
所做的
我们的 Business-ERP-Software Faktura-XP 从昨天开始就遇到了同样的问题,我们调查了这个问题并为它创建了一个补丁,也许它会对某人有所帮助:
http://www.faktura-xp.de/faktura-xp-download/update-und-patch-oeffentlich.html#toggle-id-4
在我们的案例中,TreeViewControl 停止工作,但这与自动化问题相同。 Microsoft 将 MSCOMCTL.OCX 更新为 2.2 版,如果密钥
{831FDD16-0C5C-11D2-A9FC-000F8754DA1} 有一个空的 2.1 或 2.0 条目,Common Control 将停止工作。
解决方案:
删除 Key 2.0 和 2.1,保留 2.2,取消注册 mscomctl.ocx 并重新注册。
我们的补丁将完全做到这一点,不多不少,但对我们的客户来说尽可能简单,只需单击“下一步”和“关闭”。
编辑以获取更多信息:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}.2
是在通过 REGSVR32
注册新的 MSCOMCTL.OCX(版本 6.1.98.46)时新创建的
当有一个名为 2.1 的 SubKey 时,它会输入一个引用,即 2.2 现在是要使用的 Key。
如果有一个 2.1 SubKey 没有任何内容,您的对象将无法创建,因为它将使用 2.1 版本,不能也没有检查 2.2 版本。
如有必要,请删除此密钥,然后就可以了。
进一步测试表明 2.0 子密钥已过时,可能会导致问题。
大多数装有 Microsoft Windows 7 的系统都有这个问题。对于我们的软件,no-one 与 Windows 8.1 或 Windows 10 在当前更新后称为问题。
这里有类似的问题:Ancient XP 上的 Ancient Access 97 应用程序(不久了,松了一口气)退出说“错误 91:对象变量或块变量未设置”。检查表明,当 Mscomctl.ocx 中的进度条控件被寻址时会发生这种情况。
我发现 KB2881029 (MS16-004) 是罪魁祸首。它会安装 MSCOMCTL.OCX 的新版本。在机器 w/o 上,此更新 Access 应用程序运行良好。但它不适合删除,至少这是我们的 WSUS 在我准备删除时告诉我的。无论如何,我们不想 w/o 安全更新。
阅读了关于 HKCR\TypeLib{831FDD16...该更新确实在安装时创建了一个空的。干得好,微软...!
感谢大家的贡献,
我发现 de-referencing 和 re-referencing Excel VBA 项目中的 Microsoft Windows Common Controls 6.0 (Service Pack 6) 最终可以正常工作。
!!!...但是...!!!
简单的 un-ticking / re-ticking 复选框太简单了!对于re-referencing它,你需要在c:\Windows\SysWOW64\
中使用"browse"和selectMSCOMCTL.OCX
(注意,在浏览器window中,您需要将文件类型从"dll"更改为"OCX"(或"all"))
我试过在没有 运行 Daniel Alexander 的补丁(至 un-register 和 re-register MSCOMCTL.OCX 的机器上简单地执行此操作,并从中删除旧的空 2.0 密钥注册),但它没有用,所以我认为需要执行上述步骤。我将尝试彻底测试哪些步骤是必要的,并编辑此答案以逐步说明整个过程,但暂时 运行ning Daniel Alexander 的补丁(作为管理员!)和 re-referencing Windows Excel VBA 项目中的 Microsoft Windows Common Controls 6.0 (Service Pack 6) 似乎有效。
这里已经详细描述了问题:
"Error messages or Access crashes after you install security update MS16-004"
MS: Article ID: 3139567
(Last Review: 02/16/2016 19:15:00 - Revision: 3.0)
解决方案
我使用 Microsoft Windows Common Controls 6.0 (Service Pack 6) 添加了一个 Treeview Active X 控件到我们的电子表格之一,即 MSCOMCTL.OCX
位于 C:\Windows\SysWOW64\
KB2881029(Microsoft Office 2010 32 位版本的安全更新)(MS16-004),于 2016 年 1 月 15 日(或前后)从 Microsoft 推出,安装新版本的 MSCOMCTL.OCX
( v6.1.98.46) 在 2015 年 12 月 9 日是 "Created",但在更新时是 "Accessed"(即安装在计算机上)。
这使得工作簿 "lose" 引用了 MSCOMCTL.OCX
("lose" 上的引号,因为引用仍然被勾选但不再有效;工作簿无法编译,因为"Compile error: Object library feature not supported" 或 "Automation error").
似乎更新通过添加 SubKey 2.0 修改了以下注册表项,但将其留空,并且没有注册新的 MSCOMCTL.OCX
:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}\
解决问题需要三个步骤:
MSCOMCTL.OCX
需要从提升的命令提示符中取消注册和 re-registered,如下所示:C:\Windows\system32>Regsvr32 /u C:\Windows\SysWOW64\MSCOMCTL.OCX C:\Windows\system32>Regsvr32 C:\Windows\SysWOW64\MSCOMCTL.OCX
通过 REGSVR32 注册新的
MSCOMCTL.OCX
(版本 6.1.98.46)时,注册表中添加了一个新密钥:KEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}.2
如果已经存在名为2.1 的SubKey,则输入一个引用,即2.2 现在是要使用的Key。但它对空的 2.0 SubKey 没有任何作用!
如果有一个 2.0(或 2.1 就此而言)SubKey 没有任何内容,任何使用该 OCX 的 object 都应该无法创建,因为它将使用 2.0(resp 2.1)版本,它可以't 也没有检查 2.2 版本。
通过删除错误或被取代的键 2.0 和 2.1 清理注册表,只留下最新的工作键 2.2。这可以通过 selecting HKEY_CLASSES_ROOT、Edit/Find/MSCOMCTRL.OCX.
从注册表编辑器完成(注意:这一步似乎是可选的,因为我已经检查过只执行第 1 步和第 3 步会使工作簿再次工作。但感觉这是正确的做法)
在 Excel 工作簿 VBA 项目中,需要取消引用 Microsoft Windows Common Controls 6.0 (Service Pack 6) 并且 re-referenced. Re-referencing不只是re-ticking盒子的问题,需要用到"Browse",select
MSCOMCTL.OCX
在C:\Windows\SysWOW64\
(注意,在浏览器window中,您需要将文件类型从"dll"更改为"OCX"(或"all"))
Daniel Alexander Karr(请参阅下文 post)友善地分享了他编写的自动执行步骤 1 和 2 的脚本(注意需要 运行 作为管理员)。
感谢 Daniel 和 wmelonman 帮助您理解问题并找到解决方案。
原版Post
与这个 3 岁孩子描述的相似 post (VBA Automation Errors due to Office Service Pack 3.0 caused by Forms),我的一本完美工作簿一天又一天停止工作...
在昨晚执行的更新列表中,以下是 Office 更新:
- KB3114563(Microsoft Office 2010 32 位版本的定义更新)
- KB2881029(Microsoft Office 2010 32 位版本的安全更新)
- KB3114555(Microsoft Office 2010 32 位版本更新)
- KB3114553(Microsoft Office 2010 32 位版本的安全更新)
- KB3114564(Microsoft Excel 2010 32 位版本的安全更新)
还有其他更新,但一般的 Microsoft Windows 更新,并非特定于 Office,希望它们与此处无关。
我的理解是 "Automation error" 是由于项目没有编译,因为我从 Microsoft Windows Common Controls 6.0 (Service Pack 6),即位于 C:\Windows\SysWOW64\
MSCOMCTL.OCX
不幸的是un-registering和re-registeringMSCOMCTL.OCX
as explained in the aforementioned post没有解决问题。
我也尝试删除所有 *.exd
,但我的 C:
驱动器上没有。
可能相关的其他信息:
MSCOMCTL.OCX
文件版本为6.1.98.46
,创建和最后修改时间为 2015-12-09,但在昨天(2016-01-15)凌晨 3 点 33 分访问,即更新时间大致相同发生(最近一次是凌晨 3:14)。- 一旦通过初始 "automation error" 消息,我将收到一条附加消息 "Compile error: Object library feature not supported",突出显示与附加控件关联的代码行。
- 我已经通过创建空白表单并尝试添加一个来验证这些是 "causing" 问题。我收到错误消息 "Could not complete the operation due to error 800a0011"。
- 这些附加控件是 Microsoft TreeView Control 6.0 (SP6) 和 Microsoft ImageList Control 6 (SP6)。
- 我可以添加 Microsoft TreeView 控件 5.0 版 (SP2) 和 Microsoft ImageList 控件 5.0 版 (SP2) 而不会引发错误(尽管我没有尝试让它们工作)。
有谁知道 MSCOMCTL.OCX
在昨天的 Microsoft 更新后发生了类似的事故?这可能证实它可能是我的问题的根源。
有人知道修复方法吗?
有谁知道如何向 Microsoft 报告此问题(如果确实是问题的根源)?
最后,对于那些感兴趣的人,有一种方法可以避免 Microsoft 更新弄乱 ActiveX 控件...不使用它们!这就是 JPK 为他的 TreeView.
所做的我们的 Business-ERP-Software Faktura-XP 从昨天开始就遇到了同样的问题,我们调查了这个问题并为它创建了一个补丁,也许它会对某人有所帮助:
http://www.faktura-xp.de/faktura-xp-download/update-und-patch-oeffentlich.html#toggle-id-4
在我们的案例中,TreeViewControl 停止工作,但这与自动化问题相同。 Microsoft 将 MSCOMCTL.OCX 更新为 2.2 版,如果密钥 {831FDD16-0C5C-11D2-A9FC-000F8754DA1} 有一个空的 2.1 或 2.0 条目,Common Control 将停止工作。 解决方案: 删除 Key 2.0 和 2.1,保留 2.2,取消注册 mscomctl.ocx 并重新注册。
我们的补丁将完全做到这一点,不多不少,但对我们的客户来说尽可能简单,只需单击“下一步”和“关闭”。
编辑以获取更多信息:
HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}.2
是在通过 REGSVR32
注册新的 MSCOMCTL.OCX(版本 6.1.98.46)时新创建的当有一个名为 2.1 的 SubKey 时,它会输入一个引用,即 2.2 现在是要使用的 Key。
如果有一个 2.1 SubKey 没有任何内容,您的对象将无法创建,因为它将使用 2.1 版本,不能也没有检查 2.2 版本。
如有必要,请删除此密钥,然后就可以了。
进一步测试表明 2.0 子密钥已过时,可能会导致问题。
大多数装有 Microsoft Windows 7 的系统都有这个问题。对于我们的软件,no-one 与 Windows 8.1 或 Windows 10 在当前更新后称为问题。
这里有类似的问题:Ancient XP 上的 Ancient Access 97 应用程序(不久了,松了一口气)退出说“错误 91:对象变量或块变量未设置”。检查表明,当 Mscomctl.ocx 中的进度条控件被寻址时会发生这种情况。
我发现 KB2881029 (MS16-004) 是罪魁祸首。它会安装 MSCOMCTL.OCX 的新版本。在机器 w/o 上,此更新 Access 应用程序运行良好。但它不适合删除,至少这是我们的 WSUS 在我准备删除时告诉我的。无论如何,我们不想 w/o 安全更新。
阅读了关于 HKCR\TypeLib{831FDD16...该更新确实在安装时创建了一个空的。干得好,微软...!
感谢大家的贡献,
我发现 de-referencing 和 re-referencing Excel VBA 项目中的 Microsoft Windows Common Controls 6.0 (Service Pack 6) 最终可以正常工作。
!!!...但是...!!!
简单的 un-ticking / re-ticking 复选框太简单了!对于re-referencing它,你需要在c:\Windows\SysWOW64\
中使用"browse"和selectMSCOMCTL.OCX
(注意,在浏览器window中,您需要将文件类型从"dll"更改为"OCX"(或"all"))
我试过在没有 运行 Daniel Alexander 的补丁(至 un-register 和 re-register MSCOMCTL.OCX 的机器上简单地执行此操作,并从中删除旧的空 2.0 密钥注册),但它没有用,所以我认为需要执行上述步骤。我将尝试彻底测试哪些步骤是必要的,并编辑此答案以逐步说明整个过程,但暂时 运行ning Daniel Alexander 的补丁(作为管理员!)和 re-referencing Windows Excel VBA 项目中的 Microsoft Windows Common Controls 6.0 (Service Pack 6) 似乎有效。
这里已经详细描述了问题:
"Error messages or Access crashes after you install security update MS16-004"
MS: Article ID: 3139567
(Last Review: 02/16/2016 19:15:00 - Revision: 3.0)