首页 文章

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

提问于
浏览
9

Solution

我已经使用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)的新版本"Created"在2015-12-09,但在更新时"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 并从提升的命令提示符重新注册,如下所示:
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

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

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

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

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

  • 在Excel工作簿VBA项目中,需要取消引用并重新引用Microsoft Windows Common Controls 6.0(Service Pack 6) . 重新引用不只是重新勾选框,您需要使用"Browse",并在 C:\Windows\SysWOW64\ 中选择 MSCOMCTL.OCX

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

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

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

Original Post

与这个3年前的帖子(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"是由于项目没有编译,因为我在我的一个表单上存在2个"additional" ActiveX控件,我从Microsoft Windows Common Controls 6.0(Service Pack 6)引用,即 MSCOMCTL.OCX ,它位于 C:\Windows\SysWOW64\

不幸的是,取消注册并重新注册 MSCOMCTL.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 Updates弄乱ActiveX控件......不使用它们!这就是JPK为他的_3030784做的事情 .

4 回答

  • 0

    我们的业务 - 软件 - 软件Faktura-XP从昨天起就遇到了同样的问题,我们调查了问题,并为它创建了一个补丁,也许它会帮助某人:

    http://www.faktura-xp.de/faktura-xp-download/update-und-patch-oeffentlich.html#toggle-id-4

    在我们的Case中,TreeViewControl停止工作,但它与Automatition的问题相同 . Microsoft将MSCOMCTL.OCX更新为版本2.2,如果密钥{831FDD16-0C5C-11D2-A9FC-000F8754DA1}具有空2.1或2.0条目,则公共控件将停止工作 . 解决方案:删除密钥2.0和2.1,离开2.2,取消注册mscomctl.ocx并重新注册 .

    我们的修补程序将完全按照这一点,仅此而已,但对于我们的客户而言尽可能简单,只需单击“下一步”和“关闭”即可 .

    编辑了解更多信息:

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

    通过REGSVR32注册新的MSCOMCTL.OCX(版本6.1.98.46)时新创建

    当有一个名为2.1的SubKey时,它输入一个2.2现在是使用密钥的引用 .

    如果其中没有任何内容的2.1 SubKey,您的对象将无法创建,因为它将使用2.1版本,不能并且不检查2.2版本 .

    如果需要,删除此密钥,你很高兴 .

    进一步的测试表明,2.0 SubKey已经过时,可能会导致问题 .

    大多数使用Microsoft Windows 7的系统都存在此问题 . 对于我们的软件,在当前更新后,没有人使用Windows 8.1或Windows 10称为问题 .

  • 3

    类似的问题:古代XP上的古代Access 97应用程序(不再长时间,松了一口气)退出“ Error 91: Object variable or With block variable not set ” . 检查表明,当处理位于Mscomctl.ocx的进度条控件时,会发生这种情况 .

    我发现KB2881029(MS16-004)是罪魁祸首 . 它安装新版本的MSCOMCTL.OCX . 在没有此更新的计算机上,Access应用程序正常运行 . 但它不适合移除,至少这是我们的WSUS告诉我的时候 . 无论如何,我们不希望没有安全更新 .

    阅读了有关HKCR \ TypeLib的答案{831FDD16 ...我在安装更新之前尝试删除当时仍然填充\ 2.0子项,但发现即使使用不存在的\ 2.0子键,更新也会创建空的在安装 . 干得好,微软......!

  • 0

    谢谢你的贡献,
    我发现在Excel VBA项目中取消引用和重新引用Microsoft Windows Common Controls 6.0(Service Pack 6)最终会使其工作 .
    !!!...但...!!!
    只需勾选/重新勾选勾选框就太简单了!要重新引用它,您需要使用"browse",并在c:\ Windows \ SysWOW64 \中选择MSCOMCTL.OCX
    (注意,在浏览器窗口中,您需要将文件类型从"dll"更改为"OCX"(或"all"))
    我试过在一台没有't run Daniel Alexander'补丁的机器上做这件事(取消注册并重新注册MSCOMCTL.OCX,并从寄存器中删除旧的空2.0键),它没有_3030793的补丁(AS管理员! )并在Excel VBA项目中重新引用Microsoft Windows Common Controls 6.0(Service Pack 6)似乎可行 .

  • 0

    这里已经详细描述了这个问题:

    “安装安全更新MS16-004后错误消息或Access崩溃”MS:文章编号:3139567(最后修改:02/16/2016 19:15:00 - 修订版:3.0)

    https://support.microsoft.com/en-us/kb/3139567

相关问题