20차시

Access 매크로와 이벤트 프로시저(VBA)

Part 3. 데이터베이스 일반 · 출제 빈도 ★★☆

이 차시를 공부하는 이유

마지막 차시입니다. Access 매크로는 함수 이름만 보고 기능을 떠올리는 문제가 대부분이라, 이름을 영어 뜻 그대로 풀어 읽으면(Open+Form = 폼 열기) 쉽게 외워집니다.

2급에서 먼저 보면 좋은 내용

1급 전용 과목이지만, 2급·1급 엑셀 매크로를 배웠다면 Access 매크로 함수와 VBA가 훨씬 익숙합니다.

학습 목표

Access 매크로의 특징과 자동 실행 매크로(AutoExec)를 설명할 수 있다.
폼·보고서·실행 관련 매크로 함수의 기능을 구분할 수 있다.
주요 이벤트의 발생 시점을 이해한다.
DoCmd, Form(Forms), Recordset 개체의 주요 메서드와 속성을 설명할 수 있다.

핵심 개념

1. Access 매크로의 특징
  • Access 매크로는 테이블·쿼리·폼·보고서 등을 미리 정의된 매크로 함수로 자동화합니다(엑셀처럼 동작을 녹화하는 방식이 아님). 주로 컨트롤의 이벤트에 연결해 사용합니다.
  • 하나의 매크로 그룹에 여러 매크로를, 하나의 매크로에 여러 함수를 넣을 수 있으며, 함수는 위에서 아래 순서로 실행됩니다.
  • 조건에 맞을 때만 실행되는 조건 매크로(If 블록)를 작성할 수 있습니다.
  • 이름이 AutoExec인 매크로는 데이터베이스를 열 때 자동 실행됩니다. 자동 실행을 막으려면 Shift를 누른 채 파일을 엽니다.
  • 독립 매크로는 탐색 창의 '매크로'에 표시되지만, 폼·보고서에 포함된 매크로는 탐색 창에 표시되지 않습니다.
2. 주요 매크로 함수
매크로 함수기능
OpenForm / OpenReport / OpenQuery / OpenTable폼 / 보고서 / 쿼리 / 테이블 열기 (보기 형식 지정)
CloseWindow지정한 창(개체) 닫기
GoToRecord특정 레코드로 이동 (First, Last, Previous, Next, New 등)
GoToControl / GoToPage특정 컨트롤로 포커스 이동 / 폼의 지정 페이지로 이동
FindRecord / FindNextRecord조건에 맞는 첫 레코드 찾기 / 다음 레코드 찾기
ApplyFilter테이블·쿼리의 레코드를 필터링
Requery개체의 컨트롤 원본을 다시 조회해 갱신
MessageBox메시지 상자 표시
RunSQL / RunMacro / RunCodeSQL문 실행 / 매크로 실행 / 프로시저(함수) 실행
RunMenuCommand / RunApplicationAccess 명령 실행 / 메모장·엑셀 등 다른 프로그램 실행
QuitAccessAccess 종료
CancelEvent이벤트 취소 (인수 없음)
ExportWithFormatting / CopyObject개체를 Excel·RTF·텍스트·PDF 등으로 내보내기 / 개체 복사
SetValue / SetTempVar컨트롤·속성 값 설정 / 임시 변수 설정
3. 이벤트와 이벤트 프로시저

이벤트는 클릭, 키 입력, 레코드 이동처럼 개체가 인식하는 동작이고, 이벤트 프로시저는 그 이벤트가 일어날 때 자동으로 실행되는 VBA 코드입니다.

이벤트발생 시점
BeforeUpdate컨트롤·레코드의 변경된 데이터가 저장되기 전 (유효성 검사·취소에 활용)
AfterUpdate데이터가 저장된 후
BeforeInsert / AfterInsert새 레코드에 첫 글자를 입력할 때 / 새 레코드가 추가된 후
Current (On Current)포커스가 다른 레코드로 이동해 현재 레코드가 바뀔 때, 폼을 열거나 새로 고칠 때
Change텍스트 상자·콤보 상자 내용이 바뀔 때마다
Click / DblClick마우스 클릭 / 더블클릭
GotFocus / LostFocus포커스를 받을 때 / 잃을 때
Open → Load → Resize → Activate → Current폼을 열 때 이벤트가 발생하는 순서 (닫을 때: Unload → Deactivate → Close)
Activate / Deactivate폼·보고서가 활성화될 때 / 다른 창으로 바뀔 때
NoData보고서에 표시할 데이터가 없을 때 (보고서)
시험 함정 포인트
Before~는 '하기 전'(취소 가능), After~는 '한 후'입니다. BeforeInsert는 레코드가 만들어지기 전 첫 글자를 입력할 때 발생한다는 점도 자주 묻습니다.
4. DoCmd 개체와 Forms 컬렉션
VBA 예시
Private Sub cmd보고서_Click() DoCmd.OpenReport "매출보고서", acViewPreview, , "거래처코드='" & Me.txt코드 & "'" End Sub Private Sub cmd닫기_Click() DoCmd.Close ' 현재 폼 닫기 End Sub Forms!고객관리!txt이름 = "홍길동" ' 열려 있는 <고객관리> 폼의 컨트롤 값 설정 Me.Requery ' Me = 코드가 들어 있는 현재 폼
  • DoCmd: VBA에서 매크로 함수를 실행하는 개체. DoCmd.OpenForm, OpenReport, OpenQuery, Close, GoToRecord, RunSQL, Quit 등
  • OpenReport의 보기 형식: acViewNormal(바로 인쇄, 기본값), acViewPreview(인쇄 미리 보기), acViewDesign(디자인 보기)
  • Forms 컬렉션: 현재 열려 있는 폼들의 모음. Forms!폼이름!컨트롤이름 또는 Forms("폼이름")으로 참조합니다. 폼의 RecordSource, Filter, FilterOn, OrderBy 속성으로 원본·필터·정렬을 바꿀 수 있습니다.
5. Recordset 개체

테이블이나 쿼리의 레코드 집합을 VBA로 다루는 개체입니다. 레코드 포인터를 옮겨 가며 읽고, 추가·수정·삭제합니다.

구분이름기능
속성BOF / EOF현재 위치가 첫 레코드 앞이면 BOF=True / 마지막 레코드 뒤이면 EOF=True
속성RecordCount / Fields레코드 개수 / 필드 모음
메서드MoveFirst / MoveLast / MoveNext / MovePrevious처음 / 마지막 / 다음 / 이전 레코드로 이동
메서드AddNew → Update새 레코드 추가 → 변경 내용 저장
메서드Edit → Update / Delete현재 레코드 수정 → 저장 / 현재 레코드 삭제
메서드FindFirst / FindNext / Seek조건에 맞는 레코드 찾기
메서드Requery / Close다시 조회 / 레코드셋 닫기
레코드를 끝까지 읽는 반복 패턴
Do Until rs.EOF ' 마지막 레코드 뒤에 도달할 때까지 합계 = 합계 + rs!금액 rs.MoveNext Loop
시험 함정 포인트
AddNew나 Edit 후 Update를 실행하지 않으면 변경 내용이 저장되지 않습니다.

확인 문제

1 / 5
문제 1
데이터베이스 파일을 열 때 자동으로 실행되는 매크로의 이름과, 자동 실행을 막는 방법을 바르게 짝지은 것은?
①
AutoRun – Ctrl을 누른 채 열기
②
AutoExec – Shift를 누른 채 열기
③
AutoOpen – Alt를 누른 채 열기
④
AutoStart – Esc를 누른 채 열기
💡 정답 ② 해설: AutoExec 매크로는 데이터베이스를 열 때 자동 실행되며, Shift를 누른 채 파일을 열면 실행되지 않습니다.
문제 2
다음 중 Access를 종료하는 매크로 함수는?
①
CloseWindow
②
QuitAccess
③
CancelEvent
④
RunApplication
💡 정답 ② 해설: QuitAccess는 Access를 종료합니다. CloseWindow는 개체 창을 닫고, CancelEvent는 이벤트를 취소하며, RunApplication은 다른 프로그램을 실행합니다.
문제 3
컨트롤이나 레코드의 변경된 데이터가 저장되기 전에 발생하여 입력 값을 검사하고 저장을 취소하는 데 주로 사용하는 이벤트는?
①
AfterUpdate
②
BeforeUpdate
③
Current
④
AfterInsert
💡 정답 ② 해설: BeforeUpdate는 데이터가 업데이트되기 전에 발생하므로 값 검사 후 Cancel로 저장을 막을 수 있습니다.
문제 4
Recordset 개체에서 현재 레코드 포인터가 마지막 레코드 뒤에 있음을 나타내는 속성은?
①
BOF
②
EOF
③
RecordCount
④
Fields
💡 정답 ② 해설: EOF(End Of File)는 마지막 레코드 뒤, BOF(Beginning Of File)는 첫 레코드 앞에 있을 때 True입니다.
문제 5
VBA에서 <매출보고서>를 인쇄 미리 보기 형태로 여는 명령으로 옳은 것은?
①
DoCmd.OpenReport "매출보고서", acViewPreview
②
DoCmd.OpenForm "매출보고서", acViewPreview
③
Forms.OpenReport "매출보고서", acViewNormal
④
DoCmd.OpenReport "매출보고서", acViewNormal
💡 정답 ① 해설: 보고서는 DoCmd.OpenReport로 열며, acViewPreview는 인쇄 미리 보기, acViewNormal은 바로 인쇄입니다.
0/5
훌륭합니다!
모든 문제를 정확히 풀었습니다.

20차시 문제 더 풀기

확인문제와 실전 모의고사에서 이 차시 범위 문제만 모아 해설과 함께 볼 수 있습니다.

주제별 문제 보기
이전 차시
19차시. 보고서
전 과정 수료!
실전 CBT 모의고사 풀기