VBA在另一个excel和detach实例中运行代码

时间:2016-06-03 08:24:35

标签: vba excel-vba instance excel

我目前有以下代码在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

1 个答案:

答案 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...