2016-08-10 1 views
0

현재 Excel 파일의 인스턴스를 만들고 여는 매크로가 있습니다. 이러한 새 인스턴스 내에서 매크로를 실행하려고합니다. 매크로가 크고 실행하는 데 많은 시간이 걸리므로 두 인스턴스를 모두 일시 중지합니다.현재 엑셀 인스턴스를 정지시키지 않고 별도의 인스턴스에서 매크로를 독립적으로 실행하는 방법은 무엇입니까?

특정 Excel 응용 프로그램의 vbeditor에서 다른 인스턴스의 매크로를 실행하는 방법이 있습니까? 이렇게하면 다른 인스턴스가 실행되는 동안 현재 매크로를 계속 사용할 수 있습니다.

+1

실행을위한 새로운 'Excel.Application' 인스턴스를 만드십시오. – Comintern

답변

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

빠른 답장을 보내 주셔서 감사합니다! OnTime 지연에도 불구하고 이벤트는 여전히 서로 묶여 있습니다. 나는 또한 행사를 무력화 시켰습니다. – TJYen

+0

"이벤트가 여전히 서로 묶여있다"는 것이 확실하지 않습니다. - 간단한 예제로 이것을 테스트했으며 위의 개정판은'Debug.Print' 문을'wb'에서 실행하기 전에 성공적으로 출력합니다 학습장. –

+1

예제 코드와 답장을 보내 주셔서 감사합니다! 내 실수를 분명히했습니다. – TJYen

관련 문제