当另一个应用程序已打开 Excel 进程时,如何强制 Excel 打开带有加载项的文档?

当另一个应用程序已打开 Excel 进程时,如何强制 Excel 打开带有加载项的文档?

当 MATLAB R2015b 与 Excel 交互时,它会打开一个 Excel 进程,然后保持该进程打开,直到 MATLAB 关闭。发生这种情况时,如果我尝试通过文件资源管理器打开电子表格,它会在 Excel 实例中打开,而不会加载加载项。此外,以这种方式打开的文件不会自动保存或要求用户在退出时保存。

如果我通过开始菜单打开 Excel 应用程序,则完整的 Excel 将加载所有加载项。即使我这样做了,通过文件资源管理器打开新文件也会在禁用加载项的版本中打开。有没有办法强制 Excel 在启用了加载项的 Excel 版本中打开文件?

我目前正在使用 Office 2013、MATLAB R2015b 和 Windows 7。

更新:我找到了此问题部分的错误报告和 MATLAB 补丁。它在这里:https://www.mathworks.com/support/bugreports/1325577

答案1

这取决于插件的类型。基本上,你可以拥有 Excel 插件(通常用 VBA 编写)和 COM 插件,后者可以用任何理解 COM 的语言编写。这也取决于插件的安装位置。

某些目录中的 Excel 插件可以被自动找到并打开。安装 Excel 插件的常见位置是 C:\Users\\AppData\Roaming\Addins。如果 Excel 插件存储在此处,则可以从 Excel 中的“文件”->“选项”->“插件”选项卡或“开发人员”选项卡(如果已启用)打开它。在任一位置启用插件后,它通常会在启动 Excel 时加载。

COM 插件是使用安装程序安装的,安装程序会将对插件的引用放入注册表中。Excel 在打开时会在注册表中查找这些插件。我上面描述的两个位置还包含 COM 插件列表,可以通过这些列表启用它们。

此外,您还可以强制工作簿从 VBA 打开插件。打开工作簿时,将执行名为 Workbook_Open 的例程。一些类似这样的代码将强制安装插件。

Sub Workbook_Open()
    Const addinName as String = "insert the name of your add-in"

    If Not AddinLoaded(addinName) Then
        If AddinAvailable(addinName) Then
            On Error Resume Next
                Application.AddIns2(addinName).Installed = True
            On Error GoTo 0
        End If
    End If
End Sub

Function AddinAvailable(addinName As String) As Boolean
    Dim ad As AddIn

    On Error Resume Next
        Set ad = Application.AddIns2.Item(addinName)
    On Error GoTo 0

    AddinAvailable = Not ad Is Nothing
End Function

Function AddinLoaded(addinName As String) As Boolean
    Dim ad As AddIn, errNumber As Long

    On Error Resume Next
        Set ad = Application.AddIns2.Item(addinName)
        errNumber = Err.Number
    On Error GoTo 0

    If Not ad Is Nothing Then
        If errNumber = 0 Then AddinLoaded = ad.Installed And ad.IsOpen
    End If
End Function

相关内容