禁用 MicrosoftExcelActiveX 控件? ?

我有一些 Excel 工作表,它们使用 ActiveX 复选框来控制某些活动。他们最近工作,但今天开始出现错误。我的一个同事提醒我这个问题,但它仍然在我的电脑上工作。我把他的 Excel 版本和我的进行了比对,发现他的版本更新。我注意到有新的 Windows 更新,所以我做了更新。在我申请挂起更新后,它现在不再在我的计算机上工作。我不能再选中 ActiveX 复选框了,而且,作为调试的一部分,似乎我甚至不能向任何工作表添加 ActiveX 控件,甚至不能添加新的工作表。我得到一个错误对话框,它说,“无法插入对象。”(我仍然可以添加表单控件,只是不能添加 ActiveX。)在最近的更新之后,还有其他人有这种感觉吗?有什么建议吗?

Thanks,

麦克

251907 次浏览

从其他论坛,我了解到这是由于 MS 更新,一个很好的解决方案是简单地删除文件 MSForms.exd 从任何临时子文件夹中的用户的配置文件。例如:

C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd

C:\Users\[user.name]\AppData\Local\Temp\Word8.0\MSForms.exd

当然,必须关闭应用程序(Excel、 Word...)才能删除该文件。

KB2553154。微软需要发布一个补丁。作为 Excel 应用程序的开发人员,我们不能访问所有客户端计算机并从中删除文件。我们因为微软造成的一些问题而受到指责。

以下是我在 MicrosoftExcel 支持团队博客上找到的最佳答案

对于一些用户,窗体控件(FM20.dll)不再作为 预计在安装2014年12月更新后 在诸如使用现有 VBA 打开文件等情况下 项目,尝试将窗体控件插入到 新的工作表或运行第三方软件,可能使用这些 组件。

You may received errors such as:

“无法插入对象”“对象库无效或包含引用 到无法找到的对象定义”

此外,您可能无法使用或更改 控件上的 ActiveX 控件,或在尝试 通过代码引用 ActiveX 控件作为工作表的成员。 更新后应采取的步骤:

若要解决此问题,必须删除 客户端计算机上的控件类型库(扩展程序文件) 为此,您必须在硬盘中搜索具有“ . exd”的文件 文件扩展名,并删除您找到的所有.exd 文件 .exd files will be re-created automatically when you use the new 这些扩展程序文件将是 under the user's profile and may also be in other locations, such as 如下:

% appdata% Microsoft 窗体

% temp% Excel8.0

%temp%\VBE

脚本解决方案:

因为这个问题可能会影响多台机器,所以它也是 可以创建脚本解决方案来删除 EXD 文件和 使用策略将脚本作为登录过程的一部分运行 您需要包含以下行,并且需要 为每个 USER 运行,因为. exd 文件是特定于 USER 的。

Del% temp% vbe * . exd

Del% temp% excel8.0 * . exd

微软表单 * . exd

Del% appdata% Microsoft local * . exd

漫游微软表单 * . exd

Del% temp% word8.0 * . exd

Del% temp% PPT11.0 * . exd

附加步骤:

如果上述步骤不能解决您的问题,另一个步骤可以是 经测试(见下文警告) :

  1. On a fully updated machine and after removing the .exd files, open the file in Excel with edit permissions.

    打开 VisualBasic for Applications > 通过向任何代码模块添加某种注释或编辑来修改项目 > Debug > Compile VBA 项目。

    保存并重新打开文件。测试解析度。如果解析了,请将此更新的项目提供给其他用户。

    警告: 如果此步骤解决了您的问题,请注意,在将此更新的项目部署到其他用户之后,这些用户将 还需要在他们的系统和.exd 文件上应用更新 也被移除了

If this does not resolve your issue, it may be a different issue and 可能需要进一步的故障排除。

Microsoft 目前正在处理这个问题 更新。

来源

我是一个 Excel 开发人员,当这种情况发生时,我绝对感到痛苦。幸运的是,即使在运行 Excel 时,我也能够通过在 VBA 中重命名 MSForms.exd 文件来找到解决办法,这也可以解决这个问题。需要分发电子表格的 Excel 开发人员可以将以下 VBA 代码添加到电子表格中,使其不受 MS 更新的影响。

将此代码放在任何模块中。

Public Sub RenameMSFormsFiles()
Const tempFileName As String = "MSForms - Copy.exd"
Const msFormsFileName As String = "MSForms.exd"
On Error Resume Next


'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\MSForms.exd file
RenameFile Environ("TEMP") & "\Excel8.0\" & msFormsFileName, Environ("TEMP") & "\Excel8.0\" & tempFileName
'Try to rename the C:\Users\[user.name]\AppData\Local\Temp\VBE\MSForms.exd file
RenameFile Environ("TEMP") & "\VBE\" & msFormsFileName, Environ("TEMP") & "\VBE\" & tempFileName
End Sub


Private Sub RenameFile(fromFilePath As String, toFilePath As String)
If CheckFileExist(fromFilePath) Then
DeleteFile toFilePath
Name fromFilePath As toFilePath
End If
End Sub


Private Function CheckFileExist(path As String) As Boolean
CheckFileExist = (Dir(path) <> "")
End Function


Private Sub DeleteFile(path As String)
If CheckFileExist(path) Then
SetAttr path, vbNormal
Kill path
End If
End Sub

RenameMSFormsFiles 子例程试图将 C:\Users\[user.name]\AppData\Local\Temp\Excel8.0\C:\Users\[user.name]\AppData\Local\Temp\VBE\文件夹中的 MSForms.exd 文件重命名为 MSForms-Copy.exd。

然后在 Workbook _ Open 事件的开头调用 RenameMSFormsFiles 子例程。

Private Sub Workbook_Open()
RenameMSFormsFiles
End Sub

电子表格在打开时会尝试重命名 MSForms.exd 文件:

  1. 受影响的用户在第一次打开电子表格时运行 VBA 代码时仍然会遇到 ActiveX 控件错误。只有在执行一次 VBA 代码并重新启动 Excel 之后,问题才会得到解决。通常,当用户遇到损坏的电子表格时,下意识的反应是关闭 Excel 并尝试再次打开该电子表格。:)
  2. 每次打开电子表格时,即使 MSForms.exd 文件没有问题,也会重命名 MSForms.exd 文件。但是这个电子表格可以正常工作。

至少现在,Excel 开发人员可以继续使用此解决方案分发他们的工作,直到 Microsoft 发布修复程序。

我已经张贴了这个解决方案 给你

KB 及以上级别的建议对我不起作用。我发现,如果一个 Excel2007用户(有或没有安全更新; 不确定导致这种情况的确切环境)保存文件,原始错误将返回。

我发现再次修复该文件的最快方法是删除所有 VBA 代码。保存。然后替换 VBA 代码(复制/粘贴)。保存。在尝试此操作之前,我删除。EXD 文件第一,因为否则我得到一个错误打开。

在我的例子中,我不能升级/更新不同位置的 Excel 文件的所有用户。由于问题是在一些用户保存 Excel 文件后返回的,因此我将不得不用其他东西替换 ActiveX 控件。

在 Windows 8.1系统下,我找不到。使用 windows 搜索扩展文件。另一方面,cmd 命令 dir *.exd /S在我的系统上找到了一个文件。

为最终用户提供的简化说明。

以下是当问题出现时如何解决的方法:

  1. 关闭所有 Office 程序和文件。
  2. 打开文件资源管理器,在地址栏中键入% TEMP% ,然后按回车。这将带您进入系统临时文件夹。
  3. Locate and delete the following folders: Excel8.0, VBE, Word8.0
  4. 现在尝试再次使用您的文件,它应该没有任何问题。

您可能需要等待,直到问题发生,以便此修复工作。过早地应用它(在 WindowsUpdate 安装到您的系统之前)不会有任何帮助。

我知道许多答案已经为此张贴,但没有一个独立的答案为我的网站工作。以下是对我有效的方法:

步骤1: 卸载以下更新—— KB2920789、 KB2920790、 KB2920792、 KB2920793、 KB2984942、 KB2596927

步骤2: 隐藏这些更新,这样它们就不会在随后的重新引导中被安装

Step 3: Delete folder Excel8.0 from C:\Users\<>\AppData\Local\Temp

步骤4: 重新启动工作站(我还要确保上面提到的 KB 不会在无意中被应用)

关于这个问题,我能找到的最好的信息和更新来源是 TechNet Blog“ The Microsoft Excel Support Team Blog (正如前面提到的) :

2014年12月更新(2015年3月10日更新)

2015年3月,除了自动修复程序和手动指令外,还发布了一个修复程序 ,并且在 Windows Update 上也可以使用。

来自微软的最新更新和补丁: 安装 MS14-082安全更新后,ActiveX 自定义 Office 解决方案中出现“无法插入对象”错误

状态: 2015年3月10日更新:

此问题的修补程序已在 Office2007、2010和2013年3月的更新中发布。

有关问题的一般信息:

对于一些用户来说,在安装了2014年12月的 MS14-082 Microsoft Office 安全更新之后,窗体控件(FM20.dll)不再按预期工作。在使用表单控件打开现有 VBA 项目的文件、尝试将表单控件插入新的工作表或运行可能使用这些组件的第三方软件时,会遇到问题。

https://technet.microsoft.com/en-us/library/security/ms14-082.aspx

你可能会收到错误,例如: "Cannot insert object"; "Object library invalid or contains references to object definitions that could not be found"; "The program used to create this object is Forms. That program is either not installed on your computer or it is not responding. To edit this object, install Forms or ensure that any dialog boxes in Forms are closed." [...] Additionally, you may be unable to use or change properties of an ActiveX control on a worksheet or receive an error when trying to refer to an ActiveX control as a member of a worksheet via code.

手动和附加解决方案:

Scripting solution:

因为这个问题可能会影响多台机器,所以也可以创建一个脚本解决方案来删除 EXD 文件,并使用策略在登录过程中运行脚本。您需要的脚本应该包含以下代码行,并且需要将每个 USER 作为。Exd 文件是特定于用户的。

del %temp%\vbe\*.exd
del %temp%\excel8.0\*.exd
del %appdata%\microsoft\forms\*.exd
del %appdata%\microsoft\local\*.exd
del %temp%\word8.0\*.exd
del %temp%\PPT11.0\*.exd

附加步骤:

如果上述步骤不能解决您的问题,可以测试另一个步骤(见下面的警告) :

  1. 在完全更新的计算机上,删除.exd 文件后,使用编辑权限在 Excel 中打开该文件。

  2. 打开 Visual Basic for Applications > 通过向任何代码模块添加某种注释或编辑来修改项目 > Debug > Compile VBAProject。

  3. Save and reopen the file. Test for resolution.

如果已解决,请将此更新的项目提供给其他用户。

警告: 如果此步骤解决了您的问题,请注意,在将此更新的项目部署到其他用户之后,这些用户还需要将更新应用到他们的系统和。也删除了 exd 文件。

我想提供一个对我来说唯一有用的答案(我意识到我可能是唯一的一个)。我在一个宏中用丝带调用。密码如下:

colStore = new Collection

我没有意识到它抛出了一个错误,所以我感到困惑,并尝试在这里的一切。按钮不工作了,我没法让它工作。当我注意到这个错误并改正为:

Set colStore = new Collection

它又开始工作了。如果你问我的话,我会觉得很奇怪但也许这能帮助那些和我一样绝望的人。