首页 文章

Microsoft Excel ActiveX控件已禁用?

提问于
浏览
107

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

谢谢,

麦克风

11 回答

  • 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 ...)才能删除此文件 .

  • 3

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

    对于某些用户,在安装2014年12月更新后,Forms Controls(FM20.dll)不再按预期工作 . 有时会出现问题,例如当他们使用表单控件打开包含现有VBA项目的文件时,尝试将表单控件插入到新工作表中或运行可能使用这些组件的第三方软件 . 您可能会收到错误,例如:“无法插入对象”“对象库无效或包含对无法找到的对象定义的引用”此外,您可能无法在工作表上使用或更改ActiveX控件的属性或收到错误尝试通过代码将ActiveX控件引用为工作表的成员时 . 更新后要遵循的步骤:要解决此问题,必须删除客户端计算机上的控件类型库(扩展程序文件)的缓存版本 . 为此,您必须在硬盘上搜索具有“.exd”文件扩展名的文件,并删除找到的所有.exd文件 . 下次使用VBA时使用新控件时,将自动重新创建这些.exd文件 . 这些扩展程序文件将位于用户的配置文件下,也可能位于其他位置,例如:%appdata%\ Microsoft \ forms%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附加步骤:如果上述步骤无法解决您的问题,请执行另一步骤可以进行测试(请参阅下面的警告):在完全更新的计算机上,删除.exd文件后,使用编辑权限在Excel中打开该文件 . 打开Visual Basic for Applications>通过向任何代码模块添加注释或编辑来修改项目> Debug> Compile VBAProject . 保存并重新打开该文件 . 测试分辨率 . 如果已解决,请将此更新的项目提供给其他用户 . 警告:如果此步骤解决了您的问题,请注意在将此更新项目部署到其他用户后,这些用户还需要在其系统上应用更新,并且还删除.exd文件 . 如果这不能解决您的问题,则可能是另一个问题,可能需要进一步的故障排除 . Microsoft目前正在解决此问题 . 观看博客以获取更新 .

    Source

  • 0

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

  • 0

    我是一名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文件 . 显然,这不是一个完美的固定:

    • 在第一次打开电子表格时,受影响的用户在运行VBA代码时仍会遇到ActiveX控件错误 . 只有在执行一次VBA代码并重新启动Excel后,问题才得以解决 . 通常,当用户遇到损坏的电子表格时,下意识反应是关闭Excel并尝试再次打开电子表格 . :)

    • 每次打开电子表格时都会重命名MSForms.exd文件,即使MSForms.exd文件没有问题也是如此 . 但电子表格可以正常工作 .

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

    我发布了这个解决方案here .

  • 35

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

  • 2

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

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

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

  • 2

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

    以下是解决问题的方法:

    • 关闭所有Office程序和文件 .

    • 打开Windows资源管理器并在地址栏中键入%TEMP%,然后按Enter键 . 这将带您进入系统临时文件夹 .

    • 找到并删除以下文件夹:Excel8.0,VBE,Word8.0

    • 现在尝试再次使用您的文件,它应该没有任何问题 .

    您可能需要等到问题发生才能使此修复工作 . 过早地应用它(在Windows Update安装到您的系统之前)将无济于事 .

  • 1

    有关此问题的最佳信息和更新来源,请访问TechNet博客»Microsoft Excel支持团队博客(如上所述):

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

    On March 2015 a hotfix was released 除了自动修复程序和手动指令外,它也可以在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和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文件是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
    

    附加步骤:如果上述步骤无法解决您的问题,则可以测试另一个步骤(请参阅下面的警告):在完全更新的计算机上,删除.exd文件后,使用编辑权限在Excel中打开该文件 . 打开Visual Basic for Applications>通过向任何代码模块添加注释或编辑来修改项目> Debug> Compile VBAProject . 保存并重新打开该文件 . 测试分辨率 . 如果已解决,请将此更新的项目提供给其他用户 . 警告:如果此步骤解决了您的问题,请注意在将此更新项目部署到其他用户后,这些用户还需要在其系统上应用更新,并且还删除.exd文件 .

  • 5

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

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

    这里没有新信息,而不是我们之前的答案,但是至少它承认微软知道这个问题 .

  • 13

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

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

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

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

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

  • 14

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

    colStore = new Collection
    

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

    Set colStore = new Collection
    

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

相关问题