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

2023-11-22

Solution

我已使用 Microsoft Windows Common Controls 6.0 (Service Pack 6) 将 Treeview Active X 控件添加到我们的电子表格之一,即MSCOMCTL.OCX它住在C:\Windows\SysWOW64\

KB2881029(Microsoft Office 2010 32 位版本的安全更新)(MS16-004),于 2016 年 1 月 15 日(或前后)从 Microsoft 推出,安装了新版本的MSCOMCTL.OCX(v6.1.98.46) 于 2015 年 12 月 9 日“创建”,但在更新时“已访问”(即安装在计算机上)。

这使得工作簿“失去”了对MSCOMCTL.OCX(“丢失”上的引号,因为引用仍然被勾选但不再起作用;工作簿由于“编译错误:不支持对象库功能”或“自动化错误”而无法编译)。

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

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

解决该问题需要三个步骤:

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

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

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

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

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

    如果有一个 2.0(或 2.1)SubKey 中没有任何内容,则使用该 OCX 的任何对象都应该无法创建,因为它将使用 2.0(或 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.OCX in C:\Windows\SysWOW64\

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

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

感谢 Daniel 和 wmelonman 帮助我们理解问题并找到解决方案。

原帖

与这篇 3 年前的帖子中描述的类似(由于 Office Service Pack 3.0 Forms 引起的 VBA Automation 错误),我的一本工作完美的工作簿一天天停止工作......

在昨晚进行的更新列表中,以下是 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: drive.

可能相关的其他信息:

  • The MSCOMCTL.OCX文件版本是6.1.98.46,创建并最后修改于 2015-12-09,但在昨天 (2016-01-15) 凌晨 3.33 访问,即更新发生的时间大约相同(最新更新为凌晨 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 更新之后?这可能证实这可能是我的问题的根源。

有谁知道修复方法吗?

有谁知道如何向 Microsoft 报告此问题(如果确实是问题的根源)?

最后,对于那些感兴趣的人来说,有一种方法可以避免 Microsoft 更新弄乱 ActiveX 控件...不使用它们!这就是JPK为他所做的TreeView.


我们的 Business-ERP-Software Faktura-XP 从昨天开始就遇到了同样的问题,我们调查了该问题并为其创建了一个补丁,也许它会对某人有所帮助:

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

在我们的案例中,TreeViewControl 停止工作,但这将是同样的自动化问题。 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 的子密钥时,它会输入一个引用,其中 2.2 现在是要使用的密钥。

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

删除这个必要的密钥就可以了。

进一步的测试表明 2.0 SubKey 已过时并且可能会导致问题。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

  • 如何使用 VBA 将 mm/dd/yyyy 更改为 dd/mm/yyyy

    我在使用 VBA 将 mm dd yyyy 转换为 dd mm yyyy 日期格式时遇到问题 我有一个这样的表 仅供参考 该表是从报告工具自动生成的 字符串操作 或任何 Excel 函数可以提供帮助吗 希望知道如何解决这个问题的人可以给我一
  • 如何在字符串vba中包含引号

    我想存储以下文本 Test1 Monday Test Abcdef 全部在字符串中包含引号 我知道要在字符串中包含引号 我必须包含 之前 但在这里这不是一个很好的解决方案 因为我在文本中有太多这样的解决方案 知道如何一次完成这一切吗 您有两
  • Confluence:使用 VBA 更新现有页面

    我尝试使用 VBA 更新 Confluence 页面 我的想法是使用REST API加载页面内容 修改内容然后上传修改后的版本 这是我的代码 Private Sub TestRESTApi Dim uname As String uname
  • Apache poi setformula 不适用于 SE

    我正在尝试在 XSSFCell With POI 中设置公式 Cell setFormula SE D87 0 D80 D87 错误是 名称 SE 在当前工作簿中完全未知 Why 看起来您正在尝试创建一个IF公式 我发现这一页 http w
  • 我可以用文本框设置变量名称吗? excel

    我可以使用 TextBox Vba Excel 设置变量的名称吗 我必须以在文本框中写入组名称并单击命令按钮的方式输入新的产品组 代码必须从文本框中获取字符串 并将该字符串设置为新创建的数组的名称 我只想在运行时创建一个新变量 或数组 据信
  • EPPlus Excel 行高不一致

    我已经使用 EPPlus 生成了一个 excel 文件 在 MS Office 2007 中一切似乎都很完美 但客户端使用的是 MS Office 2010 2013 并且在第 29 行之后未设置行高 这是一个非常奇怪的问题 我已经尝试了
  • 在Google电子表格中划分整列

    我是 Google 电子表格的一个相对较新的用户 我希望 B 列中的每个单元格都是 A 列 同一行 中内容除以 5 的结果 B1 B2 B3 等 商 应为 A1 A2 A3 等 被除数 除以 5 除数 在示例中 B1 A1 5 我知道一项一
  • VBA 字符串 255 个字符限制

    我在使用 VBA 时遇到问题 并注意到它的字符串限制为 255 个字符 我实际上正在尝试通过 POST 发送 JSON 并暂停执行 我注意到该字符串始终只有 255 个字符 有没有办法调整字符串的大小或其他什么 我在这个问题上浪费了大约 6
  • Pandas 0.22.0:IndexError:读取 xls 时列表索引超出范围

    我正在尝试将 282Mb 65536 行 x 138 列 xls 文件加载到 pandas 数据框中 import pandas as pd import os filename r invoicing xls dir os path di
  • 在 MS Word 中运行外部 vba 代码

    我可以将外部代码链接到 Word 文档吗 我有很多带有宏的 Word 文档 VBA 代码 全部使用相同的代码 我希望代码从外部源运行 而不是从所有这些文档中运行 这样 如果我必须更新代码 我只有一个地方需要更新 您可以创建一个模板并将其放入
  • 在 Node.js 中解析 Json(带有数组和对象)并将数据导出到 Excel 文件中

    我是 Node js 新手 我的要求是 我需要解析 JSON 并将数据导出到 Excel 文件中 其中包含 JSON 中的所有字段 我的 JSON 如下 id 1255 title The Brain and Nervous System
  • 在二维范围内查找匹配的公式

    我需要一个公式来查找二维范围内的值并返回匹配单元格的坐标或单元格地址 例如 R A B C 1 John Matt Pete 2 Sara Bret Chad 3 Lila Maya Cami 我想搜索范围A1 C3 for Chad并返回
  • VBA中的字符串是可以迭代的数组吗?

    VBA中字符串是数组吗 例如 我可以像在 C C 中那样迭代它吗 做这样的事情 char myArray 10 for int i 0 i lt length i cout lt lt myArray i VBA 中的等价物是什么 它的行为
  • Excel工作簿关闭后反复打开

    我使用了 Application ontime 方法来调度一些宏 关闭工作簿后 它会一次又一次地打开 为了解决这个问题 我在工作簿上设置了另一个事件 BeforeClosed 现在它显示运行时错误 1004 Object Applicati
  • 将 Excel 范围转换为 VBA 字符串

    我想将给定范围内的值转换为 VBA 字符串 其中原始单元格值由任何选定的列分隔符和行分隔符分隔 分隔符可以是一个字符或更长的字符串 行分隔符是行末尾的字符串 该字符串应该像我们从左上角 从左到右 到右下角读取文本一样完成 以下是范围 A1
  • numpy NPV 和 Excel NPV 有区别吗?

    我的 Excel 中有一行包含 11 个值 TotalSavings 0 8000 8000 8000 8000 8000 8000 8000 8000 8000 8000 贴现率为 0 08 我在 Excel 中使用 计算 NPVNPV
  • 支持 >65k 行的 Excel VBA SQL 驱动程序

    在 Excel 2010 中通过 VBA 查询 Excel 数据时 我遇到一个有趣的问题 我正在使用这些驱动程序连接到 xls 或 xls x m 文件 Sub OpenCon ByRef theConn As Connection ByV
  • Redim Preserve 给出“下标超出范围”

    我想要Redim Preserve一个数组我不断收到错误 下标超出范围 我知道只有最后一个维度的大小可以更改 这正是我正在做的事情 这里出了什么问题 数组的类型是Variant BmMatrix Sheets BENCH Range a60
  • 使用宏打开受信任文档或启用宏时 Excel 崩溃

    正如标题所示 我无法使用宏打开受信任的文档 Excel 立即崩溃 制作文档的副本允许其打开 因为该副本不受信任 并且我可以检查 VB 编辑器中的宏 但启用宏会导致另一次崩溃 为什么会发生这种情况以及我可以采取什么措施来解决它 我今天遇到了类
  • 使用 VBA 通过 Access 导航网页/操作 IE

    你好 StackOverflow 社区 我有一个关于使用 Access VBA 操作 IE 的问题 本质上 我正在尝试编写代码 使用 IE 打开特定网页 在该页面中搜索特定链接 目标链接的名称将取决于用户的情况 通过以编程方式单击该链接导航

随机推荐