이전 포스팅에는 MsgBox명령어를 사용하여 화면에 메세지를 출력하는 방법을 알아보았다. 이번 포스팅에선 작성한 코드를 언제 실행시킬 것인지, 엑셀은 어떤 행위에서 코드를 실행하는지 알아볼 것이다.

엑셀 버전 : MS Excel 2013

설명에 앞서.. VBAVisual Basic 이지만 .NET Visual Basic과는 전혀 다른 언어이다. 구글링에 꼭 참고하길 바란다. 검색어 앞에 꼭 VBA를 붙여서 검색하길 바란다. 또는 VB 6.0 으로 검색해도 나쁘지 않겠다!

Event!

코드는 항상 '어떤 일'이 발생했을 때 실행된다. 이 말만 들으면 이해가 안되겠지? 예를 들어 코드는 '마우스로 버튼을 클릭할 때', '엑셀이 켜졌을 때', '시트를 바꿨을 때', '키보드로 셀에 값을 입력할 때' 실행된다. 방금 나열한 '어떤 일'을 Event라고 부른다. Event는 앞에 소개한 것보다 훨씬 다양한 종류가 있다.

Activate Event

바로 코딩 해보자.
먼저 코딩 할 수 있는 환경을 만들어야 한다. 아래 순서대로 따라가보자.

  1. VBA 화면을 켠다. (Alt + F11)
  2. 프로젝트 탐색기에서 Sheet1을 선택한다.
  3. Worksheet를 선택한다.
  4. Activate 이벤트를 선택한다.
  5. 코딩 시작!

VBA Worksheet_Activate

Worksheet_Activate()는 시트가 활성화(Activate)될 때 코드가 실행된다는 뜻이다. 무슨 말인지 모르겠으니 MsgBox를 띄워보자.

Private Sub Worksheet_Activate()
  MsgBox "시트가 활성화 되었습니다!"
End Sub

이제 엑셀로 돌아가서 코드가 어떻게 동작하는지 확인해보자.

  1. 엑셀로 돌아간다.
  2. Sheet2를 선택한다. (Sheet1만 아니라면 뭐든 좋다.)
  3. 다시 Sheet1을 선택한다.
  4. "시트가 활성화 되었습니다!" 라는 메세지가 나오면 정상!

Change Event

이번에는 셀에 값을 입력하면 그 값이 MsgBox로 나타나게 해보자. VBA창으로 가서 Change라는 Evnet를 선택하자.

  1. VBA 화면을 켠다. (Alt + F11)
  2. Change 이벤트를 선택한다.
  3. 코딩!

VBA Worksheet_Change

Private Sub Worksheet_Change(ByVal Target as Range)
  MsgBox Target
End Sub

Target은 방금 값을 입력한 셀을 의미한다. 이전 시간에 MsgBox Range("A1")이 기억 난다면 좋겠다. Range("A1")은 A1셀을 가리킨다. Target도 어떤 셀을 가리키는데, 방금 값을 변경한 셀을 가리키는 것이다.

이제 다시 엑셀로 가서 시트에 뭔가 값을 써보자. 아무 셀이나 좋다. 다만 꼭 Sheet1 이어야 한다. 입력한 값이 MsgBox로 나타나면 성공이다.

마무리

지금까지의 연습과 다른 점은 직접 실행하지 않았는데 코드가 실행이 된다는 것이다. 지금까지는 F5를 눌러서 코드를 실행시켰다. 하지만 이번엔 시트가 활성화 되는 순간 코드가 저절로 실행이 된 것이다.
방금 같은 상황을 보고 Event가 발생했다고 표현한다. 더 정확하게 말하자면 Sheet1Activate Event가 발생했다고 표현할 수 있다.

코드에 ByVal Target as Range와 같이 모르는 단어들에 대해선 아직 신경 쓰지 말자. 자세한 설명은 아직 어렵고, 당장 중요하지도 않다.

Worksheet의 다양한 이벤트를 직접 눈으로 확인했으면 좋겠다. 각각 이벤트를 선택한 후 MsgBox에 적절한 값을 써 넣으면서 확인 할 수 있다. 각각 이벤트의 정확한 뜻은 이벤트 이름과 같다. 구글링 해봐도 좋고!