2016-08-10 17 views
0

私は現在、Excelファイルのインスタンスを作成して開くマクロを持っています。これらの新しいインスタンス内でマクロを実行することを検討しています。 マクロは大きく、実行にかなりの時間がかかります。これは、両方のインスタンスを一時停止します。現在のExcelインスタンスを停止させることなく、独立したインスタンスで独立してマクロを実行する方法はありますか?

特定のExcelアプリケーションのvbeditor内で別のインスタンスのマクロを実行する方法はありますか? この方法では、他のインスタンスが実行されている間、現在のマクロを継続できます。

+1

実行するための新しい「Excel.Application」インスタンスを作成してください。 – Comintern

答えて

0

Excelの新しいインスタンスを作成できますが、新しいインスタンスのOnTimeメソッドを使用する必要があります。 .Runステートメントを使用して現在のワークブックからそれらを実行しようとすると、それはスレッドを縛ります。

ここでは例を示しますが、通常の呼び出されたプロシージャでこれをテストし、.EnableEventsも含めて、イベントハンドラが開かれたときに2番目のブックにイベントハンドラが起動するのを防ぎます。これがなければ、イベントハンドラがあれば、実行時に実行を中断し、実行を一時停止することができます。

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 
+0

すばやく返信いただきありがとうございます!オンタイムの遅延にもかかわらず、イベントはまだお互いに結びつき、ハングアップしています。私もイベントを無効にしました。 – TJYen

+0

「イベントはまだお互いに結びついています」とはどういう意味かわかりません - 私はいくつかの単純なケースでこれをテストし、上記のリビジョンは 'Debug.Print'ステートメントを' wb'で実行する前に正常に表示しますワークブック。 –

+1

サンプルコードをご返信ありがとうございます!私の誤りを明確にしました。 – TJYen

関連する問題