Microsoft Excel ActiveX控件已禁用?

时间:2014-12-10 21:44:10

标签: excel vba activex

我有一些Excel工作表,它们使用ActiveX复选框来控制某些活动。他们最近工作但今天开始出错。我被一位同事告知了这一点,但它仍然在我的电脑上工作。我检查了他对我的Excel版本,他更新了。我注意到有新的Windows更新,所以我做了更新。应用挂起的更新后,它现在不再适用于我的计算机。我不能再检查ActiveX复选框了,并且,作为尝试调试的一部分,似乎我甚至无法将ActiveX控件添加到任何工作表,甚至是新的工作表。我收到一个错误对话框,上面写着“无法插入对象”。 (我仍然可以添加表单控件,而不是ActiveX。)最近更新后遇到此问题的其他人?有什么建议吗?

谢谢,

麦克

11 个答案:

答案 0 :(得分:156)

从其他论坛,我了解到这是由于MS更新,并且一个很好的解决方法是从用户配置文件中的任何Temp子文件夹中删除文件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 ...)才能删除此文件。

答案 1 :(得分:35)

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

  

对于某些用户,Forms Controls(FM20.dll)不再起作用   安装2014年12月更新后预计。问题是   有时经历过,例如当他们用现有的VBA打开文件时   使用表单控件的项目,尝试将表单控件插入到a   新工作表或运行可能使用这些的第三方软件   组件。

     

您可能会收到错误,例如:

     

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

     

此外,您可能无法使用或更改某个属性   工作表上的ActiveX控件或尝试时收到错误   通过代码将ActiveX控件称为工作表的成员。   更新后要遵循的步骤:

     

要解决此问题,您必须删除该缓存版本   客户端计算机上的控件类型库(扩展程序文件)。去做   这个,你必须搜索你的硬盘上有“.exd”的文件   文件扩展名并删除您找到的所有.exd文件。这些   使用新文件时,将自动重新创建.exd文件   下次使用VBA时控制。这些扩展文件将是   在用户的个人资料下,也可能在其他位置,例如   以下内容:

     

%APPDATA%\微软\形式

     

%TEMP%\ Excel8.0

     

%TEMP%\ VBE

     

脚本解决方案:

     

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

     

del%temp%\ vbe \ *。exd

     

del%temp%\ excel8.0 \ * .exd

     

del%appdata%\ microsoft \ forms \ * .exd

     

del%appdata%\ microsoft \ local \ * .exd

     

del%appdata%\漫游\ microsoft \ forms \ * .exd

     

del%temp%\ word8.0 \ * .exd

     

del%temp%\ PPT11.0 \ * .exd

     

补充步骤:

     

如果上述步骤无法解决您的问题,可以采取另一个步骤   经过测试(见下面的警告):

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

         

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

         

    保存并重新打开该文件。测试分辨率。如果已解决,请将此更新的项目提供给其他用户。

         

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

  2.         

    如果这不能解决您的问题,则可能是另一个问题   可能需要进一步的故障排除

         

    Microsoft目前正在解决此问题。观看博客   更新。

Source

答案 2 :(得分:14)

那是KB2553154。 Microsoft需要发布修复程序。作为Excel应用程序的开发人员,我们无法访问所有客户端计算机并从中删除文件。我们因微软引起的事情而受到指责。

答案 3 :(得分:13)

我是一名Excel开发人员,当发生这种情况时,我确实感到痛苦。幸运的是,我能够通过在VBA中重命名MSForms.exd文件来找到解决方法,即使在Excel运行时也可以解决问题。需要分发其电子表格的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文件没有问题也是如此。但电子表格可以正常使用。
  3. 至少目前,Excel开发人员可以继续使用此解决方法分发他们的工作,直到Microsoft发布修复程序。

    我已发布此解决方案here

答案 4 :(得分:5)

使用Windows 8.1,我无法使用Windows搜索找到任何.exd文件。另一方面,cmd命令 dir *.exd /S 在我的系统上找到了一个文件。

答案 5 :(得分:3)

KB及以上的建议对我没有用。我发现,如果一个Excel 2007用户(有或没有安全更新;不确定导致此问题的确切情况)保存文件,则会返回原始错误。

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

就我而言,我无法在不同位置升级/更新我的Excel文件的所有用户。由于在一些用户保存Excel文件后问题又出现了,我将不得不用其他东西替换ActiveX控件。

答案 6 :(得分:2)

最终用户的简化说明。随意复制/粘贴以下内容。

以下是解决问题的方法:

  1. 关闭所有Office程序和文件。
  2. 打开Windows资源管理器并在地址栏中键入%TEMP%,然后按Enter键。这将带您进入系统临时文件夹。
  3. 找到并删除以下文件夹:Excel8.0,VBE,Word8.0
  4. 现在尝试再次使用您的文件,它不应该有任何问题。
  5. 您可能需要等到问题发生才能使此修复工作正常。过早地应用它(在Windows Update安装到您的系统之前)不会有帮助。

答案 7 :(得分:2)

我可以找到关于此问题的最佳信息和更新来源是TechNet博客»Microsoft Excel支持团队博客(如上所述):

Form Controls stop working after December 2014 Updates (Updated March 10, 2015)

2015年3月发布了修补程序以及自动修复程序和手动说明,并且它也可以在Windows Update上使用。

Microsoft的最新更新和修复: 3025036 "Cannot insert object" error in an ActiveX custom Office solution after you install the MS14-082 security update

  

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

     

此问题的修补程序已于2015年3月更新Office 2007,2010&amp; 2013.

有关问题的一般信息:

  

对于某些用户,在2014年12月安装MS14-082 Microsoft Office安全更新后,表单控件(FM20.dll)不再按预期工作。有时会出现问题,例如当他们使用表单打开包含现有VBA项目的文件时控件,尝试将表单控件插入到新工作表中或运行可能使用这些组件的第三方软件。

     

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

     

您可能会收到以下错误:   “无法插入对象”; “对象库无效或包含对无法找到的对象定义的引用”; “用于创建此对象的程序是表单。该程序未安装在您的计算机上或没有响应。要编辑此对象,请安装表单或确保表单中的任何对话框都已关闭。” [...]   此外,您可能无法在工作表上使用或更改ActiveX控件的属性,或者在尝试通过代码将ActiveX控件作为工作表的成员引用时收到错误。

手动和其他解决方案:

  

脚本解决方案:

     

由于此问题可能会影响多台计算机,因此还可以创建脚本解决方案来删除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.   
  3. 打开Visual Basic for Applications&gt;通过向任何代码模块添加注释或某种编辑来修改项目&gt;调试&gt;编译VBAProject。

  4.   
  5. 保存并重新打开该文件。测试分辨率。

  6.         

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

         

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

答案 8 :(得分:1)

我终于在官方微软KB上找到了这个答案:

http://support.microsoft.com/kb/3025036/EN-US

此处没有新信息,而不是我们之前的答案,但至少它承认微软已经意识到这个问题。

答案 9 :(得分:0)

我知道已经发布了很多答案,但是我的网站上没有一个答案独立发挥作用。所以这对我有用:

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

步骤2:隐藏这些更新,以便在后续重新启动时不会安装这些更新

步骤3:从C:\ Users \&lt;&gt; \ AppData \ Local \ Temp

删除文件夹Excel8.0

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

答案 10 :(得分:0)

我想提供一个对我来说唯一有效的答案(我意识到我可能是唯一的一个)。我在一个宏中使用功能区调用了。它有以下代码:

colStore = new Collection

我不知道它会抛出一个错误,所以我感到很困惑,并在这里尝试了一切。按钮刚停止工作,我无法让它工作。当我注意到错误并将其更正为:

Set colStore = new Collection

它又开始工作了。如果你问我,那绝对会很奇怪,但也许它可以帮助那些像我一样绝望的人。