Microsoft Excel ActiveX控件已禁用?


113

我有一些使用ActiveX复选框控制某些活动的Excel工作表。他们最近工作,但今天开始出错。一位同事向我发出了警报,但它仍在我的计算机上工作。我对照我检查了他的Excel版本,他的版本较新。我注意到有新的Windows更新,所以我做了更新。应用待处理的更新后,它现在不再可以在我的计算机上运行。我再也无法选中ActiveX复选框,并且作为尝试调试的一部分,看来我什至无法再向任何工作表,甚至是新工作表中添加ActiveX控件。我收到一个错误对话框,提示“无法插入对象”。(我仍然可以添加表单控件,只是不能添加ActiveX。)在最近更新之后是否还有其他经历?有什么建议?

谢谢,

麦克风


具体是什么控制?还是说所有activeX?
peege

我的3个同事似乎也有这个问题。我认为他们的电子表格使用ActiveX控件-组合框和按钮。其中之一正在使用他的PC,因此无法获取更新。当他拿回它时,它成功运行了控件。也就是说,直到他的电脑自动更新。现在没有。我们也无法将ActiveX控件添加到其工作表中。
米切尔·卡普兰

5
我也遇到了这个问题,我公司的所有用户也一样。MS如何发布可能破坏Excel中ActiveX控件的更新?这太疯狂了。
哈里格2014年

3
@ vba4all:不,这是一个编程问题,属于这里。
哈里·约翰斯顿

2
@ vba4all:ActiveX控件是一种编程工具-是吗?您还将用它们做什么?例如,如果OP询问停止工作的特定第三方产品(恰好使用VBA),则情况会有所不同。但是在这种情况下,似乎是他自己的代码受到了影响?
哈里·约翰斯顿

Answers:


159

从其他论坛上,我了解到这是由于MS Update引起的,一个好的解决方法是从用户配置文件中的任何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
我有一台未更新的PC。我打开Excel,并能够添加ActiveX按钮。我寻找了C:\ Users [user.name] \ AppData \ Local \ Temp \ Excel8.0 \ MSForms.exd,但是没有Excel8.0文件夹。然后,我运行Windows更新。我再次尝试将ActiveX按钮添加到我的电子表格中,但没有成功。我还注意到,我现在拥有了Excel8.0 \ MSForms.exd。我删除了它,并且没有重新启动重新打开的Excel,现在可以添加ActiveX按钮。谢谢!
米切尔·卡普兰

2
谢谢!!此过程解决了我计算机上的问题。我觉得对于那些拥有大量公开发布版本的开发人员来说,这很麻烦……希望MS会发布修复程序。
Mike Pedersen 2014年

1
这对我不起作用。我正在其中一台PC上将系统还原到12/7/14,以查看是否可以解决该问题。我还尝试删除按钮并根据下面的答案替换它,但是我收到了弹出的“无法插入对象”之类的信息。
mountainclimber

1
对于Windows XP用户,可以在这里找到Temp子文件夹: C:\ Documents and Settings \ [user.name] \ Local Settings \ Temp \ Excel8.0 \ MSForms.exd
bjtilley 2014年

2
删除上述文件后,它对我不起作用,但是后来我在C:/ Windows / Temp文件夹中找到了这些文件,并删除了这些文件。这样我就可以解决此问题。
2015年

35

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

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

您可能会收到以下错误:

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

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

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

%appdata%\ Microsoft \ forms

%temp%\ Excel8.0

%temp%\ VBE

脚本解决方案:

由于此问题可能会影响多台计算机,因此还可以创建脚本解决方案来删除EXD文件,并使用策略在登录过程中运行脚本。您需要的脚本应包含以下行,并且由于.exd文件是USER特定的,因此需要为每个USER运行。

删除%temp%\ vbe \ *。exd

删除%temp%\ excel8.0 \ *。exd

删除%appdata%\ microsoft \ forms \ *。exd

删除%appdata%\ microsoft \ local \ *。exd

删除%appdata%\ Roaming \ microsoft \ forms \ *。exd

删除%temp%\ word8.0 \ *。exd

删除%temp%\ PPT11.0 \ *。exd

附加步骤:

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

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

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

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

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

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

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

资源


3
检查链接的源,它现在已更新脚本解决方案
peterson 2014年

在我的机器上,%appdata%被定义为“ C:\ Users \ <当前用户> \ AppData \ Roaming \”,因此没有“%appdata%\ microsoft \ local \”目录。此外,“%appdata%\ Roaming \ microsoft \ forms \”似乎是多余的,因为“ C:\ Users \ <当前用户> \ AppData \ Roaming \ Roaming \ microsoft \ forms \”,并且再次,此目录不存在在我的机器上。
pstraton

15

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


1
以及KB2596927和KB2726958,具体取决于您所运行的Office版本。
哈里·约翰斯顿

13

我是一名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发布修补程序为止。

我已经在这里发布了此解决方案。


谢谢易 它对我有用,但我必须重新启动Excel 2010(它可能与我同时运行VBA编辑器这一事实有关?)
J. Chomel

5

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


3

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

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

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


2
除了将文件另存为XLSX(删除所有代码),然后像您一样重新粘贴-再另存为XLSM,这些建议对我没有任何作用。微软在屁股上的巨大痛苦。重新安装Office也无法为我解决问题,因此没有人会浪费时间尝试
DontFretBrett 2015年

2

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

解决问题的方法如下:

  1. 关闭所有Office程序和文件。
  2. 打开Windows资源管理器,然后在地址栏中键入%TEMP%,然后按Enter。这将带您进入系统临时文件夹。
  3. 找到并删除以下文件夹:Excel8.0,VBE,Word8.0
  4. 现在尝试再次使用您的文件,它应该没有任何问题。

您可能需要等待直到问题发生才能使此修复程序起作用。过早地应用它(在系统上安装Windows Update之前)将无济于事。


2

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

在2014年12月更新(2015年3月10日更新)之后,表单控件停止工作

除了自动修复和手动说明之外,2015年3月还发布一个修补程序,该修补程序也可以在Windows Update上获得。

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

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

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

有关该问题的一般信息:

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

https://technet.microsoft.com/zh-CN/library/security/ms14-082.aspx

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

手动和其他解决方案:

脚本解决方案:

由于此问题可能会影响多台计算机,因此还可以创建脚本解决方案来删除EXD文件,并使用策略在登录过程中运行脚本。您需要的脚本应包含以下行,并且由于.exd文件是USER特定的,因此需要为每个USER运行。

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. 保存并重新打开文件。测试分辨率。

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

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



0

我知道已经为此发布了许多答案,但是没有一个答案独立地为我的网站工作。所以这对我有用:

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

步骤2:隐藏这些更新,以免在以后的重新启动时安装它们

步骤3:从C:\ Users \ <> \ AppData \ Local \ Temp删除文件夹Excel8.0

步骤4:重新启动workstatiion(我还要确保没有无意中应用了上述KB)


0

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

colStore = new Collection

我不知道它会引发错误,所以我很困惑,在这里尝试了所有方法。该按钮刚刚停止工作,我无法正常工作。当我注意到该错误并将其更正为:

Set colStore = new Collection

它再次开始工作。如果您问我,那绝对是很奇怪,但也许它可以帮助那些像我一样绝望的人。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.