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

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的所有实例中,每个实例都有自己的窗口。

谢谢!

我build议你的插件使用registry来存储你想要保存的设置,并在所有Excel会话中应用。 然后,插件将使用应用程序级别的事件(如workbook.activate)来检查存储的registry设置。

你阻止人们打开一个新的Excel实例,所以你的插件将工作! – 好的!

Charles的想法很好,就像跨实例的全局variables一样。 同样,你可以写出一个.ini文件并且每次引用。

这取决于你在做什么,但是你确定你想让所有实例的设置保持一致吗? 也许我想在每一个不同的设置?