배움터  
  HOME > 배움터 > Daily Tip
Daily Tip

제품:   Excel 버전:   공통
검색어:   Auto_open,Workbook_open
제목:   Auto_Open과 Workbook_Open은 무슨 차이일까요?
     
 

새 페이지 1

  STEP>

[현상과 원인]

엑셀파일을 열 때 자동 실행되는 모듈을 작성시 사용하는 이벤트함수(?)가 workbook_open과 auto_open이 있는 것 같은데요. 이 둘의 차이점은 뭐고 어떤 장단점이 있는 궁금합니다.

[방법]

위의 질문은 2001-08-26에 어느 분이 올려준 질문의 내용입니다. 사실 기능적인 면에서 Auto_Open 과 Workbook_Open은 차이가 없습니다. 둘 다 통합문서를 열게 되면 자동으로 실행되는 프로시저입니다.

엑셀을 실행하면 엑셀은 자동적으로 Auto_Open 프로시저를 검색합니다. 그리고 그 프로시저가 존재한다면 자동으로 실행하게 됩니다. Auto_Open의 경우 엑셀97 이전버전부터 지원된 것이고 엑셀 2000 버전부터는 새롭게 Workbook_Open 이벤트 프로시저가 지원되기 시작하였다. 가장 최근의 버전인 엑셀2002버전에서도 Auto_Open 과 Workbook_Open은 모두 사용 가능합니다.

가장 먼저 눈에 띄는 차이점은 타이밍의 차이입니다. 즉 둘 다 존재한다면 어느 것이 먼저 실행될 것인가 입니다. 직접 이를 확인하기 위해 엑셀97, 2000, 2002버전에서 다음과 같은 프로시저를 작성하여 보았습니다.

AutoOpen.xls
 Private Sub Workbook_Open()

    MsgBox "Workbook_Open 이벤트 프로시저가 실행되었습니다", vbInformation

End Sub

 

Sub Auto_Open()

    MsgBox "Auto_Open 프로시저가 실행되었습니다", vbInformation

End Sub 


결론적으로 모든 버전에서 Workbook_Open 이벤트 프로시저가 먼저 실행되고, 다음으로 Auto_Open 프로시저가 실행됩니다.

두 번째 차이점은 사용자가 통합문서를 직접 여는 것이 아니라 다른 통합문서에 열어 볼 때 발생합니다. 다음의 코드를 작성하여 앞서 만든 AutoOpen.xls파일을 열어보았습니다.

TestAuto.xls

Sub OpenAutoOpen()

    Workbooks.Open "AutoOpen.xls"

End Sub

이 경우 Workbook_Open 이벤트 프로시저만 실행되고 Auto_Open 프로시저는 실행되지 않습니다.

만일 다른 통합문서를 열면서 Workbook_Open 이벤트 프로시저의 실행을 막아두려면 EnableEvents 프로퍼티를 False로 줍니다.

Application.EnableEvents = False

Workbooks.Open(Filename:="AutoOpen.xls")

Application.EnableEvents = True

 

 
  TIP>
Auto_Open 프로시저를 강제로 실행하기

엑셀97이전 버전으로 만든 엑셀 애드인과 같은 프로그램의 경우 Auto_Open 프로시저가 실행이 되지 않아 당황스러운 경우가 종종 있습니다.

이런 경우 다음과 같이 RunAutoMacros 메서드를 사용합니다.

Workbooks.Open(Filename:="AutoOpen.xls").RunAutoMacros Which:=xlAutoOpen
  참고> 
Auto_Close와 Workbook_BeforeClose

Auto_Open 과 Workbook_Open과 반대되는 프로시저로는 Auto_Close와 Workbook_BeforeClose입니다. 이것들의 차이점은 Auto_Open 과 Workbook_Open과 마찬가입니다. Auto_Close가 나중에 발생합니다.