如何在单独的实例中独立运行宏而不停止当前的excel实例?

时间:2016-08-10 14:00:57

标签: excel vba excel-vba macros instances

我目前有一个用于创建和打开excel文件实例的宏。我期待在这些新实例中运行宏。 问题是宏很大并且需要花费大量时间来运行,这会暂停两个excel实例。

有没有办法在该特定Excel应用程序的vbeditor中运行另一个实例的宏? 这样,当前宏可以在另一个实例运行时继续。

1 个答案:

答案 0 :(得分:0)

您可以创建Excel的新实例,但是您需要使用新实例的OnTime方法。如果您只是尝试使用.Run语句从当前工作簿中执行它们,那将占用该线程。

这是一个例子,我已经对正常的调用过程进行了测试,并且还包括.EnableEvents以防止事件处理程序在打开时触发第二个工作簿。如果没有这个,事件处理程序(如果有的话)可能会在运行时间内触发并暂停执行。

Sub main()
Dim oXL As Excel.Application
Dim wb As Workbook
Dim filePath$, fileName$, moduleName$, procName$

'## The locaation of the file you want to open, which contains the macro
filePath = "C:\debug\"
'## The name of the workbook containing the macro
fileName = "book2.xlsm"
'## The name of the module containing the macro:
moduleName = "Module1"
'## The name of the macro procedure
procName = "foo"
'## Create new instance of Excel
Set oXL = New Excel.Application
oXL.Visible = True 'or True, if you prefer
'## Open the file containing the macro
oXL.EnableEvents = False
Set wb = oXL.Workbooks.Open(filePath & "\" & fileName)
oXL.EnableEvents = True
'## Use the OnTime method to hand the thread to other instance of Excel
oXL.Application.OnTime Now + TimeValue("0:00:05"), fileName & "!" & moduleName & "." & procName
'## Inform user that the macro is running in the other workbook/instance of Excel
Debug.Print "The procedure " & procName & " is running in " & fileName

wb.Activate
Set oXL = Nothing
End Sub