解
我已经使用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)
解决问题需要三个步骤:
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.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).再参考不只是一个再勾选框,你需要使用"浏览",然后选择事MSCOMCTL.OCX中C:\Windows\SysWOW64\
(注意,在浏览器窗口中,您需要将文件类型从"dll"更改为"OCX"(或"全部"))
Daniel Alexander Karr(请参阅下面的帖子)亲切地分享了他编写的脚本,以自动执行步骤1和2(请注意,需要以管理员身份运行).
感谢Daniel和wmelonman帮助您理解问题并找到解决方案.
原帖
与此3年前发布的帖子 (由表单引起的Office Service Pack 3.0导致的VBA自动化错误)类似,我的一个完美工作的工作簿从一天到下一天停止工作......
在昨晚进行的更新列表中,以下是Office更新: