오늘 끝나면
이벤트와 폼
- ✓이벤트와 폼의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 이벤트와이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
버튼·UserForm — 클릭으로 실행 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
엑셀 VBA · 07
이벤트와
폼
지금까지 매크로는 직접 실행 버튼으로 돌렸다.
이제 버튼 클릭이나 시트 변경 같은 사건에 코드를 매단다.
사용자는 버튼만 누르면 된다. 이것이 이벤트와 폼이다.
이벤트 = 무슨 일이 일어났을 때
이벤트는 “무슨 일이 일어났다”는 신호다.
버튼 클릭, 셀 값 변경, 시트 열기가 전부 이벤트다.
지금까지는 Sub를 만들고 F5나 매크로 목록에서 직접 굴렸다.
이벤트를 쓰면 사람이 어떤 행동을 한 그 순간에 코드가 알아서 깬다.
엑셀은 사건마다 정해진 이름의 이벤트 프로시저를 부른다.
시트 셀이 바뀌면 Worksheet_Change가 불리고, 통합문서를 열면 Workbook_Open이 불린다.
그 이름의 Sub에 코드를 적어두면 그 일이 날 때마다 실행된다.
| 사건(이벤트) | 불리는 프로시저 |
|---|---|
| 버튼 클릭 | Button_Click가장 흔한 이벤트 |
| 셀 값 변경 | Worksheet_Change값이 바뀐 순간 |
| 통합문서 열기 | Workbook_Open파일을 열 때 |
| 시트 선택 | Worksheet_Activate탭을 누를 때 |
버튼에 매크로를 연결한다
가장 흔한 이벤트는 버튼 클릭이다.
시트에 버튼을 하나 놓고, 거기에 매크로를 연결한다.
엑셀에는 두 종류 버튼이 있다.
양식 컨트롤 버튼은 우클릭한 뒤 “매크로 지정”에서 원하는 Sub 이름을 골라 붙인다.
ActiveX 버튼은 더블클릭하면 CommandButton1_Click 이벤트 Sub가 자동으로 생긴다.
연결만 해두면 그 다음은 단순하다.
버튼을 누르는 순간 Click 이벤트가 발생하고, 매달린 Sub가 처음부터 끝까지 한 번 돈다.
매크로 목록을 열 필요도 없다. 클릭 한 번이 곧 실행이다.
Sub MakeReport()
Range("A1") = "완료"
MsgBox "보고서 생성"
End Sub버튼 누름 = Click 발생 = MakeReport 실행
직접 눌러 보는 버튼 이벤트
버튼 셋이 각자 다른 Sub에 연결돼 있다.
더하기는 PlusOne(), 두 배는 Double(), 초기화는 Reset()에 매달려 있다.
버튼을 누르면 그 버튼의 Click 이벤트가 연결된 Sub를 불러 셀 A1을 바꾼다.
아래 로그를 본다.
plus_Click → PlusOne()처럼 어떤 사건이 어떤 매크로를 깨웠는지 한 줄로 찍힌다.
사건이 연결된 프로시저를 부르고, 프로시저가 결과를 낸다.
버튼을 누르면 그 버튼의 Click 이벤트가 연결된 Sub를 불러 A1을 바꾼다.
클릭 = 이벤트 · 연결된 Sub = 매크로 · 셀 변화 = 결과
UserForm으로 입력 UI를 띄운다
버튼만으로 부족할 때가 있다.
이름이나 수량, 날짜를 받아야 하면 UserForm을 띄운다.
UserForm은 시트 위에 뜨는 작은 입력 창이다.
텍스트 상자(TextBox), 목록(ComboBox), 버튼(CommandButton)을 끌어다 붙여 만든다.
코드에서 UserForm1.Show로 화면에 띄운다.
확인 버튼의 Click 이벤트 안에서 입력값을 읽어 셀에 쓴다.
예를 들면 Range("A1").Value = TextBox1.Value처럼 쓴다.
폼은 결국 예쁜 입력 칸에 버튼 이벤트를 더한 것이다. 새 문법이 아니라 지금 배운 이벤트의 응용이다.
Range("A1") = TextBox1.Value
Range("B1") = TextBox2.Value폼 = 입력 칸 + 버튼 이벤트. 새 문법이 아니다
사용자는 클릭만, 코드는 알아서
이벤트와 폼의 목적은 하나다.
코드를 모르는 사람도 버튼만 눌러 매크로를 굴리게 하는 것이다.
나만 쓰는 매크로는 F5로 돌려도 된다.
하지만 동료에게 넘길 자동화라면 “여기 버튼 누르세요” 한마디로 끝나야 한다.
버튼과 폼이 그 다리다. 안쪽의 복잡한 Sub는 숨고, 밖에는 버튼만 보인다.
정리하면 사건에 코드를 매다는 게 이벤트, 입력을 받는 창이 폼이다.
Q. 버튼을 누르면 매크로가 도는 원리는? (셀이 매크로를 호출 · 클릭 이벤트에 코드 연결 · 엑셀이 자동 추측 · F5가 눌림)
정답은 클릭 이벤트에 코드 연결이다.버튼을 누르면 Click 이벤트가 발생하고, 거기 연결해 둔 Sub(매크로)가 실행된다.
엑셀이 알아서 추측하는 게 아니라, 우리가 미리 그 버튼의 이벤트에 매크로를 매달아 둔 것이다.
사건이 연결된 프로시저를 부르고 결과를 낸다. 이게 이벤트 실행의 전부다.
코드 아는 사람용
누구나 클릭 한 번