[현상과 원인]
엑셀파일을 열 때 자동 실행되는 모듈을 작성시 사용하는 이벤트함수(?)가 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
|