由于2016年1月Office Update导致的Excel VBA"自动化错误",可能是由MSCOMCTL.OCX引起的(Microsoft Windows Common Controls 6.o(Service Pack 6))

Tho*_*set 9 treeview excel vba excel-vba

我已经使用Microsoft Windows Common Controls 6.0(Service Pack 6)在我们的电子表格中添加了一个Treeview Active X Control,即MSCOMCTL.OCX它存在于C:\Windows\SysWOW64\

KB2881029(Microsoft Office 2010 32位版安全更新)(MS16-004),在2016-01-15(或其附近)从Microsoft推出,安装了新版本的MSCOMCTL.OCX(v6.1.98.46),它是"创建的" "在2015-12-09,但在更新时"访问"(即安装在计算机上).

这使得工作簿"丢失"引用MSCOMCTL.OCX(引用标记为"丢失",因为引用仍然被勾选但不再有效;由于"编译错误:不支持对象库功能"或"自动化错误",工作簿无法编译").

似乎更新通过添加SubKey 2.0修改以下注册表项,但保留为空,并且不注册新的MSCOMCTL.OCX:

HKEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}\
Run Code Online (Sandbox Code Playgroud)

解决问题需要三个步骤:

  1. MSCOMCTL.OCX 需要取消注册并从提升的命令提示符重新注册,如下所示:

    C:\Windows\system32>Regsvr32 /u C:\\Windows\SysWOW64\MSCOMCTL.OCX 
    C:\Windows\system32>Regsvr32 C:\\Windows\SysWOW64\MSCOMCTL.OCX
    

    MSCOMCTL.OCX通过REGSVR32 注册新版本(版本6.1.98.46)时,会向注册表添加一个新密钥:

    KEY_CLASSES_ROOT\TypeLib\{831FDD16-0C5C-11D2-A9FC-000F8754DA1}\2.2
    

    如果有一个名为2.1的SubKey已经存在,它会输入一个2.2现在是使用密钥的引用.但它对空的2.0 SubKey没有任何作用!

    如果有一个2.0(或2.1的那个)SubKey,其中没有任何东西,使用该OCX的任何对象都应该无法创建,因为它将使用2.0(resp 2.1)版本,它不能也不会检查2.2版.

  2. 通过删除错误或取代的密钥2.0和2.1来清理注册表,只留下最新的工作密钥2.2.这可以通过选择HKEY_CLASSES_ROOT,Edit/Find/MSCOMCTRL.OCX从注册表编辑器完成.

    (注意:这一步似乎是可选的,因为我已经检查过只做第1步和第3步使得工作簿再次工作.但感觉这是正确的做法)

  3. 在Excel工作簿VBA项目中,需要重新引用和重新引用Microsoft Windows Common Controls 6.0(Service Pack 6).再参考不只是一个再勾选框,你需要使用"浏览",然后选择事MSCOMCTL.OCXC:\Windows\SysWOW64\

    (注意,在浏览器窗口中,您需要将文件类型从"dll"更改为"OCX"(或"全部"))

Daniel Alexander Karr(请参阅下面的帖子)亲切地分享了他编写的脚本,以自动执行步骤1和2(请注意,需要以管理员身份运行).

感谢Daniel和wmelonman帮助您理解问题并找到解决方案.

原帖

与此3年前发布的帖子 (由表单引起的Office Service Pack 3.0导致的VBA自动化错误)类似,我的一个完美工作的工作簿从一天到下一天停止工作......

在昨晚进行的更新列表中,以下是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,他们希望在这里不相关.

我的理解是"自动化错误"是由于项目没有编译,因为我从Microsoft Windows Common Controls 6.0(Service Pack 6)引用的一个表单上存在2个"附加"ActiveX控件,即MSCOMCTL.OCX住在C:\Windows\SysWOW64\

遗憾的是,MSCOMCTL.OCX 如上述帖子中所述,未注册和重新注册并未解决问题.

我也尝试删除所有*.exd,但我的C:驱动器上没有.

可能相关的其他信息:

  • MSCOMCTL.OCX文件版本6.1.98.46,创建和最后修改2015年12月9日,但在上午03点33分访问昨日(2016年1月15日),即大约在同一时间发生的更新(上午最新的一个3:14).
  • 一旦传递了初始的"自动化错误"消息,我将收到另一条消息"编译错误:不支持对象库功能",突出显示与其他控件关联的代码行.
  • 我已经通过创建一个空白表单并试图添加一个来验证这些"导致"问题.我收到错误消息"由于错误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 Updates弄乱ActiveX控件......不使用它们!这就是JPK为他的TreeView所做的.

Tho*_*set 0

感谢大家的贡献,
我发现在 Excel VBA 项目中取消引用并重新引用 Microsoft Windows Common Controls 6.0 (Service Pack 6) 最终可以使其工作。
!!!...但...!!!
简单地取消勾选/重新勾选复选框就太简单了!要重新引用它,您需要使用“浏览”,并选择c:\Windows\SysWOW64\中的MSCOMCTL.OCX
(注意,在浏览器窗口中,您需要将文件类型从“dll”更改为“OCX” (或“全部”))
我尝试在没有运行 Daniel Alexander 补丁的机器上简单地执行此操作(取消注册并重新注册 MSCOMCTL.OCX,并从寄存器中删除旧的空 2.0 密钥),它不起作用,所以我希望上述步骤是必需的。我将尝试彻底测试哪些步骤是必要的,并编辑此答案以一步一步地阐明整个过程,但暂时运行 Daniel Alexander 的补丁(作为管理员!)并重新引用 Microsoft Windows Common Controls 6.0(服务Pack 6) 在 Excel VBA 项目中似乎可以工作。