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的所有实例中,每个实例都有自己的窗口。
谢谢!
答案 0 :(得分:1)
我建议您的插件使用注册表来存储您要保留的设置并应用于所有Excel会话。 然后,插件将使用应用程序级事件(如workbook.activate)来检查存储的注册表设置。
答案 1 :(得分:1)
你阻止人们打开一个新的Excel实例,这样你的插件就可以了! - 很好!!!!
Charles的想法很好,就像实例中的全局变量一样。同样,您可以写出.ini文件并每次引用它。
这取决于您正在做什么,但是您确定要在所有实例中设置相同吗?也许我想在每个人中设置不同的设置?