Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
是否禁用Microsoft Excel ActiveX控件?_Excel_Vba_Activex - Fatal编程技术网

是否禁用Microsoft Excel ActiveX控件?

是否禁用Microsoft Excel ActiveX控件?,excel,vba,activex,Excel,Vba,Activex,我有一些Excel工作表,它们使用ActiveX复选框来控制某些活动。他们最近工作过,但今天开始出错。一位同事提醒我这一点,但它仍在我的电脑上工作。我对照我的Excel检查了他的版本,他的版本更新了。我注意到有新的Windows更新,所以我做了更新。在我应用了挂起的更新后,它现在在我的计算机上不再工作。我再也不能选中ActiveX复选框了,而且,作为调试的一部分,似乎我甚至再也不能将ActiveX控件添加到任何工作表,甚至新工作表。我得到一个错误对话框,上面写着“无法插入对象”。(我仍然可以添加

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

谢谢


Mike

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

确实如此。微软需要发布一个补丁。作为Excel应用程序的开发人员,我们不能访问所有客户的计算机并从中删除文件。我们被指责是微软造成的。

这是我在微软Excel支持团队博客上找到的最好答案

对于某些用户,窗体控件(FM20.dll)不再作为 预计在安装2014年12月更新后。问题是 在使用现有VBA打开文件时有经验 在使用窗体控件的项目中,尝试将窗体控件插入到 新建工作表或运行可能使用这些工作表的第三方软件 组成部分

您可能会收到以下错误:

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

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

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

%appdata%\Microsoft\forms

%temp%\Excel8.0

%temp%\VBE

脚本解决方案:

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

删除%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

附加步骤:

如果上述步骤无法解决您的问题,则可以执行另一个步骤 已测试(见下面的警告):

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

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

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

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

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

    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    
    
    电子表格打开时将尝试重命名MSForms.exd文件。显然,这不是一个完美的解决方案:

  • 第一次打开电子表格时,受影响的用户在运行VBA代码时仍会遇到ActiveX控件错误。只有在执行一次VBA代码并重新启动Excel后,问题才得以解决。通常,当用户遇到损坏的电子表格时,下意识的反应是关闭Excel并再次尝试打开电子表格。:)
  • 每次打开电子表格时都会重命名MSForms.exd文件,即使MSForms.exd文件没有问题。但是电子表格会很好地工作
  • 至少现在,Excel开发人员可以继续使用此解决方案分发他们的工作,直到
    Private Sub Workbook_Open() 
      RenameMSFormsFiles  
    End Sub
    
    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
    
    colStore = new Collection
    
    Set colStore = new Collection