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

제품:   Excel 버전:   2003
검색어:   Workbook, Private Sub
제목:   이벤트 프로시저
     
 


[엑셀 VBA] 이벤트 프로시저

오늘은 7월2일(토)에 진행되는 장미희님 Excel 매크로 & VBA 과정 이벤트 프로시저에 대해서 알아보도록 하겠습니다. (사용버전: 2003)

이벤트 프로시저는 말 그대로 이벤트, 즉 특별한 상황이 발생하면 자동으로 실행되는 프로시저입니다. 일반적으로 VBA로 작성한 프로시저를 실행하려면 단추나, 아이콘, 메뉴, 단축키 등을 사용합니다. 그러나 이벤트 프로시저는 엑셀에서 특정 작업을 하면 자동으로 실행되므로 특별한 상황에서는 편리한 경우가 있습니다. 이벤트 프로시저는 프로시저 명칭이 지정되어 있습니다. 명칭의 이름은 엑셀에서 작업하는 상태와 관련이 많습니다.

예를 들어, 셀의 값을 변경할 때 실행하는 프로시저 명칭은 Change 프로시저입니다. 시트명을 클릭할 때 발생하는 프로시저 명칭은 Activate 프로시저입니다. 상황에 맞는 이벤트 프로시저를 적절하게 사용한다면 아주 유용합니다. 일반적으로 엑셀에서 시트를 삽입하면 항상 선택한 시트의 앞에 시트가 삽입됩니다. 이벤트 프로시저를 이용하여 시트가 시트의 마지막에 삽입되도록 하겠습니다.

<1> 새 문서를 열고 VBA로 화면에서 ThisWorkbook항목을 더블 클릭합니다.

<2> 표시되는 코드창의 왼쪽 콤보 상자에서 Workbook을 선택합니다. Private Sub Workbook_Open()라는 프로시저가 자동으로 표시되면 무시하고, 오른쪽 콤보상자의 목록에서 NewSheet를 선택합니다. 왼쪽 콤보상자의 항목은 작업대상 개체이고 오른쪽 콤보상자의 목록은 자동으로 실행할 이벤트 프로시저 명칭입니다.

NewSheet는 엑셀에서 새로운 시트를 삽입할 때 자동으로 실행하는 이벤트 프로시저명칭입니다.

<3> 프로시저 내에 다음과 같은 내용을 입력합니다.

Private Sub Workbook_NewSheet(ByVal Sh As Object)
Sh.Move after:=Sheets(Sheets.Count) '삽입된 시트를 모든 시트의 마지막으로 이동합니다. Sheets.count는 파일에 있는 시트의 개수를 계산합니다. 3개면 3이 됩니다. Move는 단어의 의미 그대로 이동하라는 의미로 sheets(3)의 뒤로 이동하라는 뜻입니다. Sheets(3)은 3번째 시트를 의미하는 인덱스 숫자입니다.
End Sub

<4> 엑셀 화면에서 Sheet1을 클릭하고 삽입-워크시트 메뉴를 선택합니다.

<5> 새로운 시트가 삽입되는데 sheet3뒤에 삽입되는 것을 알 수 있습니다.

<6> 이 파일에서 삽입되는 시트는 항상 모든 시트의 뒤로 삽입이 되는 것처럼 느낄 것입니다. 실제로는 선택한 시트의 앞에 삽입이 되는 것이지만 삽입되는 순간 이벤트 프로시저가 실행되어서 시트를 개수를 계산하고 계산된 시트의 맨 뒤로 이동하는 겁니다.

다음 뉴스레터에는 이벤트 프로시저를 실무에서 활용하는 예를 알아보도록 하겠습니다.