2013-04-19 3 views
0

먼저, 서로 다른 버전의 컴퓨터에서 실행되는 프로그램으로 인해 LateBinding을 사용해야한다고 명시하고 싶습니다.모든 서브 루틴에서 Latebinding 서브 루틴 호출하기

나는 Excel 응용 프로그램에 대한 개체 생성을 시작하기 위해 호출 할 수있는 모듈에 Public Sub를 선언했습니다.

'Declare Public Excel Variable to Call from one place and easy manipulation 
Public xlApp As Object 
Public wb As Object 
Public wb2 As Object 
Public ws As Object 
Public ws2 As Object 

Public Sub InitializeExcel() 
    'Create the Excel Objects 
    Set xlApp = CreateObject("Excel.Application") 
End Sub 

그리고 엑셀 응용 프로그램을 사용하여 내가 작성하는 모든 서브 루틴에서, 나는 InitializeExcel를 호출하고 모든 끝에 다음을 수행하십시오

:

On Error Resume Next 
xlApp.Quit 
Set xlApp = Nothing 
Set wb = Nothing 
Set wb2 = Nothing 
Set ws = Nothing 
Set ws2 = Nothing  

내 질문은 지금이다

각 서브 루틴마다 InitializeExcel으로 전화해야합니까? 은 엑셀입니다. 또는 응용 프로그램을 시작할 때 한 번만 호출 할 수 있습니까?

+0

당신은 왜 모든 일상의 끝에서 탁월합니까? 앱을 종료 할 때까지 열어 두지 않으시겠습니까? – MarkJ

+0

@ MarkJ - 솔직히 모르겠습니다. Excel 애플리케이션을 사용하여 코딩을 처음 시작했을 때, 어떻게하는지 가르쳐 준 나의 친구는 일상 생활의 모든 끝에이 코드를 가지고있었습니다. 나는 결코 그것을 심문하지 않았다. 하지만 앱에 댓글을 달았을 때 앱이 종료 될 때까지 앱을 종료하지 않으면 영향을 미치나요? –

답변

0

나는 몇 가지 테스트 결과 있었다 : 때마다 호출 할

InitializeExcel 요구를 언급 한 세트로 모든 서브 루틴의 끝 이후 에 엑셀 응용 프로그램 개체 인 xlapp 아무것도 아니요

각 서브 루틴에서 Set xlApp = Nothing을 제거하면 xlApp을 Excel 응용 프로그램 개체로 "다시 사용할 수 있습니다". 그러나 Excel 응용 프로그램이 백그라운드에서 계속 실행되고 새 통합 문서를 열 때마다 Excel 응용 프로그램의 다른 인스턴스가 실행되는 문제가 발생합니다.

내가 생각하기에 가장 좋은 방법은 InitializeExcel이라고 부르는 내 초기 설정이었고 절차가 호출 된 각 루틴에서 모든 것을 Nothing으로 설정했습니다.

관련 문제