Microsoft Excel ActiveX控件已禁用?

Mik*_*sen 111 excel vba activex

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

谢谢,

麦克风

小智 157

从其他论坛,我了解到这是由于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 ...)才能删除此文件.

  • 谢谢!!此过程修复了我的计算机上的问题.对于拥有大量公开发布的开发人员而言,我觉得这样做...希望MS能够发布修复程序. (2认同)
  • 删除上面的文件后,它对我没用,但后来我在C:/ Windows/Temp文件夹中找到了这些文件,并删除了这些文件.然后我就能解决这个问题了. (2认同)

Jan*_*itz 35

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

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

您可能收到以下错误:

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

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

若要解决此问题,您必须删除客户端计算机上的控件类型库(扩展程序文件)的缓存版本.为此,您必须在硬盘上搜索具有".exd"文件扩展名的文件,并删除找到的所有.exd文件.当您下次使用VBA时使用新控件时,将自动重新创建这些.exd文件.这些扩展程序文件将位于用户的配置文件下,也可能位于其他位置,例如:

%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%\ Roaming\microsoft\forms\*.exd

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

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

附加步骤:

如果上述步骤无法解决您的问题,可以测试另一个步骤(请参阅下面的警告):

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

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

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

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

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

Microsoft目前正在解决此问题.观看博客以获取更新.

资源

  • 检查链接的Source,它现在已经更新了Scripting解决方案 (3认同)

小智 14

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


Yi *_* Hu 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    
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

电子表格将在打开时尝试重命名MSForms.exd文件.显然,这不是一个完美的解决方案:

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

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

我在这里发布了这个解决方案.


Mar*_*ult 5

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