小编Tho*_*set的帖子

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

我已经使用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位版安全更新) …

treeview excel vba excel-vba

9
推荐指数
1
解决办法
2万
查看次数

标签 统计

excel ×1

excel-vba ×1

treeview ×1

vba ×1