我目前有以下代码在excel的新实例中打开工作簿(打开的工作簿有一个打开的宏)。
然而,当代码在新实例中运行时,这也会占用excel的现有实例,并且只有在工作簿打开宏运行后才释放它。有没有办法在新实例中打开excel并分离/停止现有工作簿中的代码会立即生效吗?
请参阅以下代码。
Sub OpenWBInNewInstance()
Dim xApp As Excel.Application
Set xApp = New Excel.Application
xApp.Visible = True
Dim wb As Excel.Workbook
Set wb = xApp.Workbooks.Open("Z:\MI\Not Purchased Detail\Not Purchased Detail Disposal Marketing Template.xlsb")
End Sub
答案 0 :(得分:1)
代码执行在VBA中的单个线程上运行,因此您无法执行您要求的操作,因为执行不会移动到下一行,直到整个Workbooks.Open
行已处理 - 其中包括其他工作簿中的Workbook_Open
事件。
可能的解决方法是改为使用VBScript:
Sub OpenWBInNewInstance()
Open Environ$("USERPROFILE") & "\Desktop\temp.vbs" For Output As #1
Print #1, "Set xl = CreateObject(""Excel.Application"")"
Print #1, "xl.Workbooks.Open ""Z:\MI\Not Purchased Detail\Not Purchased Detail Disposal Marketing Template.xlsb"""
Close #1
Shell Environ$("USERPROFILE") & "\Desktop\temp.vbs"
'// You will need some kind of hook here to set the workbook in other instance...