데이터베이스 일반 4강. 매크로와 모듈
액세스의 매크로는 엑셀의 매크로와 이름만 같습니다. 기록해서 만드는 게 아닙니다.
풀고 시작
골라 쌓는 방식의 매크로
엑셀에서 매크로를 만들 때는 기록 버튼을 누르고 평소처럼 작업하면 됐습니다. 액세스에는 그 버튼이 없습니다.
액세스의 매크로는 미리 정의된 작업(action) 을 목록에서 골라 순서대로 쌓는 방식입니다. 폼 열기, 보고서 인쇄, 메시지 상자 표시, 레코드 찾기, 응용 프로그램 종료 같은 것들이 준비돼 있고, 각 작업마다 인수를 채웁니다. 코드를 쓰지 않고도 자동화할 수 있다는 점은 같지만, 만드는 방향이 정반대죠.
조건을 걸 수도 있습니다. 특정 필드가 비어 있을 때만 경고를 띄우는 식입니다. 매크로 안에서 다른 매크로를 부르거나 그룹으로 묶어 관리할 수도 있습니다.
AutoExec라는 이름의 매크로는 특별합니다. 데이터베이스를 열 때 자동으로 실행됩니다. 시작 화면을 띄우거나 초기 설정을 하는 데 쓰죠. 이 자동 실행을 건너뛰려면 Shift 키를 누른 채 파일을 열면 됩니다.
언제 매크로를 쓰고 언제 모듈을 쓸까요
모듈(module) 은 VBA 코드를 담는 곳입니다. 매크로로도 되는 일을 굳이 코드로 쓰는 이유가 있습니다.
| 매크로 | 모듈 | |
|---|---|---|
| 만드는 법 | 작업을 목록에서 고릅니다 | VBA 코드를 씁니다 |
| 배우기 | 쉽습니다 | 시간이 듭니다 |
| 복잡한 논리 | 제한적입니다 | 자유롭습니다 |
| 오류 처리 | 어렵습니다 | 세밀하게 다룰 수 있습니다 |
| 재사용 | 제한적입니다 | 함수로 만들어 여러 곳에서 씁니다 |
간단한 자동화는 매크로로 충분하고, 오류를 다루어야 하거나 계산이 복잡하면 모듈로 갑니다. 실무에서는 매크로로 시작했다가 커지면 VBA로 옮기는 일이 흔합니다.
모듈에도 두 종류가 있습니다. 표준 모듈은 데이터베이스 전체에서 부를 수 있는 코드를 담고, 클래스 모듈은 특정 폼이나 보고서에 붙어 그 개체의 이벤트를 처리합니다. 폼의 단추를 눌렀을 때 실행되는 코드는 그 폼의 클래스 모듈에 들어갑니다.
이벤트는 언제 일어나는가
폼과 컨트롤은 무슨 일이 생길 때마다 이벤트(event) 를 발생시킵니다. 그 이벤트에 매크로나 프로시저를 붙이면 자동으로 실행되죠.
폼이 열릴 때 나는 이벤트만 해도 여럿입니다. Open은 폼이 열리기 시작할 때, Load는 레코드가 올라올 때, Current는 레코드가 바뀔 때마다 납니다. 새 레코드로 옮길 때마다 무언가를 해야 한다면 Current를 써야 하고, 한 번만 하면 되는 초기화는 Load에 둡니다.
컨트롤 쪽에도 있습니다. Click은 눌렀을 때, BeforeUpdate는 값이 저장되기 직전에, AfterUpdate는 저장된 직후에 납니다. 입력값을 검사해 잘못되면 저장을 막고 싶다면 반드시 BeforeUpdate를 써야 합니다. AfterUpdate는 이미 저장된 뒤라 막을 수가 없죠. 이 둘의 순서를 구분하는 문제가 자주 나옵니다.
만든 것을 지키는 일
데이터베이스를 오래 쓰면 파일이 부풀어 오릅니다. 레코드를 지워도 그 자리가 곧바로 반납되지 않기 때문입니다. 압축 및 복구를 실행하면 빈자리를 정리해 파일이 작아지고, 가벼운 손상도 함께 고쳐 줍니다. 닫을 때마다 자동으로 실행하도록 설정할 수도 있습니다.
배포할 때는 ACCDE 형식으로 저장하는 방법이 있습니다. VBA 소스 코드가 제거되고 실행 가능한 상태만 남아서, 받는 사람이 코드를 보거나 폼 디자인을 고칠 수 없습니다. 다만 되돌릴 수 없으므로 원본 ACCDB를 반드시 따로 보관해야 합니다. 이 점을 놓치면 자기가 만든 것을 자기가 고치지 못하게 됩니다.
인출 문제
이전: 데이터베이스 일반 3강 · 다음: 실기 실무 1강