모던지 / 컴퓨터활용능력 / 데이터베이스 일반 4강. 매크로와 모듈

데이터베이스 일반 4강. 매크로와 모듈

액세스의 매크로는 엑셀의 매크로와 이름만 같습니다. 기록해서 만드는 게 아닙니다.

풀고 시작

문제 1. 액세스의 매크로가 엑셀의 매크로와 다른 점으로 옳은 것은 무엇일까요?
엑셀 매크로는 동작을 녹화하지만 액세스 매크로는 녹화 기능이 없습니다. 대신 폼 열기, 보고서 인쇄, 메시지 표시처럼 미리 정의된 작업을 목록에서 골라 순서대로 쌓습니다. 같은 이름이지만 만드는 방식이 다릅니다.

골라 쌓는 방식의 매크로

엑셀에서 매크로를 만들 때는 기록 버튼을 누르고 평소처럼 작업하면 됐습니다. 액세스에는 그 버튼이 없습니다.

액세스의 매크로미리 정의된 작업(action) 을 목록에서 골라 순서대로 쌓는 방식입니다. 폼 열기, 보고서 인쇄, 메시지 상자 표시, 레코드 찾기, 응용 프로그램 종료 같은 것들이 준비돼 있고, 각 작업마다 인수를 채웁니다. 코드를 쓰지 않고도 자동화할 수 있다는 점은 같지만, 만드는 방향이 정반대죠.

조건을 걸 수도 있습니다. 특정 필드가 비어 있을 때만 경고를 띄우는 식입니다. 매크로 안에서 다른 매크로를 부르거나 그룹으로 묶어 관리할 수도 있습니다.

AutoExec라는 이름의 매크로는 특별합니다. 데이터베이스를 열 때 자동으로 실행됩니다. 시작 화면을 띄우거나 초기 설정을 하는 데 쓰죠. 이 자동 실행을 건너뛰려면 Shift 키를 누른 채 파일을 열면 됩니다.

언제 매크로를 쓰고 언제 모듈을 쓸까요

모듈(module) 은 VBA 코드를 담는 곳입니다. 매크로로도 되는 일을 굳이 코드로 쓰는 이유가 있습니다.

매크로 모듈
만드는 법 작업을 목록에서 고릅니다 VBA 코드를 씁니다
배우기 쉽습니다 시간이 듭니다
복잡한 논리 제한적입니다 자유롭습니다
오류 처리 어렵습니다 세밀하게 다룰 수 있습니다
재사용 제한적입니다 함수로 만들어 여러 곳에서 씁니다

간단한 자동화는 매크로로 충분하고, 오류를 다루어야 하거나 계산이 복잡하면 모듈로 갑니다. 실무에서는 매크로로 시작했다가 커지면 VBA로 옮기는 일이 흔합니다.

모듈에도 두 종류가 있습니다. 표준 모듈은 데이터베이스 전체에서 부를 수 있는 코드를 담고, 클래스 모듈은 특정 폼이나 보고서에 붙어 그 개체의 이벤트를 처리합니다. 폼의 단추를 눌렀을 때 실행되는 코드는 그 폼의 클래스 모듈에 들어갑니다.

이벤트는 언제 일어나는가

폼과 컨트롤은 무슨 일이 생길 때마다 이벤트(event) 를 발생시킵니다. 그 이벤트에 매크로나 프로시저를 붙이면 자동으로 실행되죠.

폼이 열릴 때 나는 이벤트만 해도 여럿입니다. Open은 폼이 열리기 시작할 때, Load는 레코드가 올라올 때, Current는 레코드가 바뀔 때마다 납니다. 새 레코드로 옮길 때마다 무언가를 해야 한다면 Current를 써야 하고, 한 번만 하면 되는 초기화는 Load에 둡니다.

컨트롤 쪽에도 있습니다. Click은 눌렀을 때, BeforeUpdate는 값이 저장되기 직전에, AfterUpdate는 저장된 직후에 납니다. 입력값을 검사해 잘못되면 저장을 막고 싶다면 반드시 BeforeUpdate를 써야 합니다. AfterUpdate는 이미 저장된 뒤라 막을 수가 없죠. 이 둘의 순서를 구분하는 문제가 자주 나옵니다.

만든 것을 지키는 일

데이터베이스를 오래 쓰면 파일이 부풀어 오릅니다. 레코드를 지워도 그 자리가 곧바로 반납되지 않기 때문입니다. 압축 및 복구를 실행하면 빈자리를 정리해 파일이 작아지고, 가벼운 손상도 함께 고쳐 줍니다. 닫을 때마다 자동으로 실행하도록 설정할 수도 있습니다.

배포할 때는 ACCDE 형식으로 저장하는 방법이 있습니다. VBA 소스 코드가 제거되고 실행 가능한 상태만 남아서, 받는 사람이 코드를 보거나 폼 디자인을 고칠 수 없습니다. 다만 되돌릴 수 없으므로 원본 ACCDB를 반드시 따로 보관해야 합니다. 이 점을 놓치면 자기가 만든 것을 자기가 고치지 못하게 됩니다.

인출 문제

문제 1. 데이터베이스를 열 때 자동으로 실행되는 매크로의 이름은 무엇일까요?
AutoExec라는 이름의 매크로는 데이터베이스를 열 때 자동으로 실행됩니다. 이 자동 실행을 건너뛰려면 Shift 키를 누른 채 파일을 열면 됩니다.
문제 2. 입력한 값이 조건에 맞지 않을 때 저장을 취소하려면 어떤 이벤트를 사용해야 할까요?
BeforeUpdate는 값이 저장되기 직전에 발생하므로 여기서 검사해 취소할 수 있습니다. AfterUpdate는 이미 저장된 뒤라 되돌릴 수 없습니다. 이 순서 차이가 검증 로직의 위치를 결정합니다.
문제 3. ACCDE 형식으로 저장했을 때의 특징으로 옳은 것은 무엇일까요?
ACCDE는 소스 코드를 제거하고 실행 상태만 남깁니다. 되돌릴 수 없으므로 원본 ACCDB를 반드시 따로 보관해야 합니다. 데이터는 그대로 남고, 압축과는 별개의 기능입니다.
문제 4. 액세스에서 압축 및 복구를 실행하는 이유로 가장 알맞은 것은 무엇일까요?
레코드를 지워도 그 자리가 곧바로 반납되지 않아 파일이 계속 커집니다. 압축 및 복구는 그 빈자리를 정리하고 가벼운 손상도 함께 복구합니다. 중복 제거나 코드 최적화와는 관계가 없습니다.

이전: 데이터베이스 일반 3강 · 다음: 실기 실무 1강

모던지 · 궁금하면 모던지 GitHub · 2026-09-10