如何在多个Excel.exe实例上运行Excel加载项

时间:2009-12-02 22:23:21

标签: excel vba

Excel中的应用程序级事件和进程仅限于应用程序的单个实例。

过去,我阻止用户在使用以下代码运行加载项时打开多个Excel实例。

Private Sub KillDuplicateProcesses()

    Dim objWMIService As Object
    Dim colItems As Variant
    Dim objItem As Object
    Dim intCount As Integer

    Set objWMIService = GetObject("winmgmts:\\.\root\cimv2")
    Set colItems = objWMIService.InstancesOf("Win32_Process")
    For Each objItem In colItems
        intCount = intCount + Abs(LCase(objItem.Name) = "excel.exe")
    Next

    If intCount > 1 Then
        MsgBox "Excel is already running.", vbCritical
        Application.Quit
    End If

    Set objWMIService = Nothing
    Set colItems = Nothing

End Sub

但是,我想知道在运行多个Excel实例时是否有办法安全地运行加载项。

例如,如果我在VBA中执行类似的操作:

Application.MoveAfterReturnDirection = xlDown

此更改以及对CommandBar对象的任何更改都应反映在Excel的所有实例中,每个实例都有自己的窗口。

谢谢!

2 个答案:

答案 0 :(得分:1)

我建议您的插件使用注册表来存储您要保留的设置并应用于所有Excel会话。 然后,插件将使用应用程序级事件(如workbook.activate)来检查存储的注册表设置。

答案 1 :(得分:1)

你阻止人们打开一个新的Excel实例,这样你的插件就可以了! - 很好!!!!

Charles的想法很好,就像实例中的全局变量一样。同样,您可以写出.ini文件并每次引用它。

这取决于您正在做什么,但是您确定要在所有实例中设置相同吗?也许我想在每个人中设置不同的设置?