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)
解决问题需要三个步骤:
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更新:
还有其他更新,但一般的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). MSCOMCTL.OCX关注昨天的微软更新有没有人知道类似的事故?这可能证实它可能是我的问题的根源.
有谁知道修复?
有谁知道如何向微软报告(如果它确实是问题的根源)?
最后,对于那些感兴趣的人,有一种方法可以避免Microsoft Updates弄乱ActiveX控件......不使用它们!这就是JPK为他的TreeView所做的.
感谢大家的贡献,
我发现在 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 项目中似乎可以工作。
| 归档时间: |
|
| 查看次数: |
21003 次 |
| 最近记录: |