에너지 관점 스터디:에관스

컴활 1급 · 프로시저 개체 참조

컴활 1급 프로시저 Me와 Forms!는 현재 폼인지 다른 열린 폼인지로 구분합니다

두음 암기는 '미현재·폼즈열림'입니다. Me는 코드가 실행 중인 현재 폼, Forms!는 Access에서 현재 열려 있는 폼을 이름으로 참조합니다.

외우기용 문장은 '미 대리는 현재 방을 보고, 폼즈 팀장은 열린 다른 방까지 찾는다'입니다. 시험장에서는 같은 폼 모듈의 컨트롤이면 Me!컨트롤명, 다른 열린 폼의 컨트롤이면 Forms!폼이름!컨트롤명으로 번역하세요.

결론부터 말하면 현재 폼의 이벤트 프로시저 안에서는 Me!txt이름처럼 짧게 쓰고, 다른 폼이나 표준 모듈에서 특정 폼을 가리킬 때는 Forms!폼이름!txt이름처럼 전체 경로를 씁니다. Forms 컬렉션에는 현재 열려 있는 폼만 들어간다는 점까지 확인해야 합니다.

컴활 1급 Access 프로시저에서 현재 폼의 Me와 다른 열린 폼의 Forms 참조법을 비교한 인포그래픽
현재 폼 모듈은 Me!컨트롤명, 다른 열린 폼은 Forms!폼이름!컨트롤명으로 시작하고 하위 폼은 중간에 .Form을 건넙니다.
작성에관스 컴활 1급 학습팀 발행2026년 8월 4일 수정2026년 8월 4일 주제프로시저 개체 참조

핵심 포인트

이 글에서 먼저 챙길 것

  • Me는 클래스 모듈에서 현재 실행 중인 폼 또는 보고서 인스턴스를 가리킵니다.
  • Me!컨트롤명은 현재 폼의 Controls 컬렉션에서 이름으로 컨트롤을 찾는 짧은 참조입니다.
  • Forms!폼이름!컨트롤명은 다른 폼이나 표준 모듈에서 현재 열려 있는 폼의 컨트롤을 가리킵니다.
  • 폼이 닫혀 있거나 개체 이름과 화면 캡션을 혼동하면 참조가 실패하므로 실행 전 이름과 열림 상태를 확인합니다.

본문

컴활 1급 공부 기준을 더 구체적으로 보기

이 글이 필요한 사람

컴활 1급 Access 프로시저에서 값 대입식은 이해하지만 Me!txt금액, Forms!판매현황!txt합계, Me.RecordSource처럼 참조 시작점이 달라질 때 멈추는 사람에게 맞는 글입니다.

기존 프로시저 풀이 가이드는 개체·이벤트·값·조건·검토의 전체 순서를 맡고, 이벤트 가이드는 Click·Load·Current·AfterUpdate 실행 시점을 맡습니다. 이 글은 코드가 읽거나 바꿀 폼과 컨트롤의 위치를 정확히 지정하는 참조법만 좁게 다룹니다.

두음 암기부터 잡으세요: 미현재·폼즈열림

'미현재'는 Me가 현재 코드가 실행되는 폼을 가리킨다는 뜻입니다. '폼즈열림'은 Forms 컬렉션이 데이터베이스의 모든 저장된 폼이 아니라 현재 열려 있는 폼만 담는다는 뜻입니다.

재미 문장은 '미 대리는 현재 방을 보고, 폼즈 팀장은 열린 다른 방까지 찾는다'입니다. 문장은 기억용이고 실제 코드에서는 '현재 폼 -> Me, 다른 열린 폼 -> Forms!폼이름'으로 바꿉니다.

참조식을 외우기 전에 지시문에 현재 폼, 다른 폼, 하위 폼 중 어디의 값을 쓰는지 표시하세요. 시작 개체가 정해지면 뒤의 컨트롤 이름과 속성을 붙이기 쉬워집니다.

Me는 현재 실행 중인 폼 인스턴스를 가리킵니다

Microsoft Learn은 Me를 클래스 모듈의 모든 프로시저에서 자동으로 사용할 수 있으며, 코드가 실행되는 특정 인스턴스를 가리키는 키워드라고 설명합니다. Access 폼 모듈에서는 현재 그 코드를 실행하는 폼을 뜻합니다.

예를 들어 현재 폼의 레코드 원본을 바꾸면 Me.RecordSource처럼 폼 속성에 점을 붙일 수 있습니다. 현재 폼의 텍스트 상자를 가리키면 Me!txt고객명처럼 컨트롤 이름을 붙입니다.

Me는 아무 모듈에서나 현재 화면을 뜻하는 만능 단어가 아닙니다. 표준 모듈은 특정 폼 인스턴스 자체를 나타내지 않으므로 Microsoft 문서도 표준 모듈에서 Me를 사용할 수 없다고 안내합니다.

현재 폼의 컨트롤은 Me!컨트롤명으로 시작합니다

현재 폼 모듈 안에서 컨트롤 값을 읽거나 속성을 바꿀 때는 Me!txt고객명, Me!cmb지역처럼 씁니다. Microsoft Access의 Controls 설명은 Me!NewData와 Me.Controls!NewData, Me.Controls("NewData") 같은 참조 방식을 제시합니다.

느낌표 뒤에는 폼의 Controls 컬렉션에 들어 있는 실제 컨트롤 이름이 옵니다. 화면에 보이는 제목이나 레이블 문구가 아니라 속성 시트의 이름을 확인해야 합니다.

컨트롤의 속성은 그 뒤에 점으로 붙입니다. 예를 들어 Me!txt고객명.Visible은 현재 폼의 txt고객명 컨트롤에서 Visible 속성을 가리키는 구조입니다. 시작 개체, 컨트롤, 속성의 세 칸으로 읽으세요.

다른 열린 폼은 Forms!폼이름!컨트롤명으로 참조합니다

Microsoft Learn의 Forms 설명에 따르면 Forms 컬렉션에는 현재 열려 있는 모든 폼이 들어 있습니다. 다른 폼의 값을 읽으려면 먼저 Forms 컬렉션, 그다음 폼 이름, 마지막에 컨트롤 이름을 지정합니다.

예를 들어 판매입력 폼의 txt고객번호를 다른 폼에서 참조한다면 Forms!판매입력!txt고객번호처럼 읽습니다. '열린 폼 모음 -> 판매입력 폼 -> 고객번호 컨트롤'의 경로입니다.

Forms!폼이름만 쓰고 컨트롤을 바로 찾을 수 있는 이유는 Controls 컬렉션을 묵시적으로 참조하기 때문입니다. Forms!판매입력.Controls!txt고객번호처럼 Controls를 명시해도 같은 위치를 설명할 수 있습니다.

Forms는 폼이 열려 있어야 값에 접근할 수 있습니다

Forms 컬렉션은 현재 열려 있는 폼만 포함합니다. 데이터베이스 창에 폼 개체가 저장되어 있어도 닫혀 있다면 Forms!폼이름 경로로 그 폼의 현재 컨트롤 값을 읽을 수 없습니다.

따라서 다른 폼 참조가 실행되지 않으면 문법만 고치기 전에 대상 폼이 실제로 열려 있는지 확인하세요. 폼을 여는 동작과 값을 읽는 동작의 실행 순서도 함께 봐야 합니다.

모든 저장된 폼 이름을 나열하는 AllForms와 현재 열린 폼 인스턴스를 다루는 Forms는 역할이 다릅니다. 컴활 프로시저의 값 참조에서는 대부분 현재 열린 폼의 Forms 경로가 핵심입니다.

느낌표·점·괄호는 역할로 나누면 덜 헷갈립니다

느낌표는 Forms!판매입력!txt고객번호처럼 이름으로 폼이나 컨트롤을 이어 찾을 때 자주 사용합니다. 점은 Me.RecordSource, Me!txt고객번호.Visible처럼 이미 찾은 개체의 속성이나 정해진 멤버를 이어 갈 때 사용합니다.

괄호 표기는 Forms("판매입력").Controls("txt고객번호")처럼 컬렉션에서 문자열 이름으로 항목을 찾는 방식입니다. 컨트롤 이름을 변수로 받아야 하는 코드에서는 괄호 방식이 필요할 수 있지만, 시험 지시문이 고정 이름을 주면 느낌표 경로가 더 짧게 읽힙니다.

이름에 공백이 있으면 Forms![판매 입력]![고객 번호]처럼 대괄호로 묶을 수 있습니다. 다만 실제 시험 연습에서는 캡션이 아니라 속성 시트의 개체 이름을 먼저 확인하는 습관이 더 중요합니다.

하위 폼은 하위 폼 컨트롤 뒤에 Form을 한 번 건넙니다

하위 폼의 내부 컨트롤을 참조할 때는 메인 폼, 하위 폼 컨트롤, 그 안의 Form 개체, 내부 컨트롤 순서로 이동합니다. Microsoft Learn은 Forms!Orders!OrderDetails.Form!OrderID 같은 예를 제시합니다.

여기서 OrderDetails는 하위 폼 자체의 이름이 아니라 메인 폼에 놓인 하위 폼 컨트롤 이름일 수 있습니다. 하위 폼 원본 개체 이름과 하위 폼 컨트롤 이름이 다르면 속성 시트에서 컨트롤 이름을 확인해야 합니다.

하위 폼 참조는 점과 느낌표를 무작정 외우기보다 '메인 폼 -> 하위 폼 컨트롤 -> .Form -> 내부 컨트롤' 네 칸으로 그리면 덜 틀립니다.

참조 오류는 위치·열림·이름·속성 순서로 찾습니다

첫째, 코드가 현재 폼 모듈 안인지 다른 폼 또는 표준 모듈인지 확인합니다. 현재 폼이면 Me, 다른 열린 폼이면 Forms!폼이름을 시작점으로 둡니다.

둘째, Forms를 썼다면 대상 폼이 열려 있는지 봅니다. 셋째, 화면 캡션이 아니라 폼과 컨트롤의 실제 이름을 확인합니다. 넷째, 마지막 점 뒤에 붙인 Visible, Value, RecordSource 같은 속성이 그 개체에 맞는지 봅니다.

하위 폼이면 중간의 하위 폼 컨트롤 이름과 .Form 다리를 확인합니다. 참조 경로를 왼쪽부터 한 칸씩 읽으면 한 줄 전체를 다시 쓰는 것보다 오류 위치를 빠르게 찾을 수 있습니다.

시험 직전에는 5줄만 남기세요

첫째, '미현재·폼즈열림'을 떠올립니다. 둘째, 현재 폼 모듈의 컨트롤은 Me!컨트롤명입니다. 셋째, 다른 열린 폼은 Forms!폼이름!컨트롤명입니다.

넷째, 폼이 닫혀 있으면 Forms 컬렉션에서 현재 값을 참조할 수 없습니다. 다섯째, 하위 폼은 메인 폼·하위 폼 컨트롤·.Form·내부 컨트롤 순서입니다.

마지막으로 캡션이 아니라 실제 개체 이름을 확인하고, 컨트롤 뒤에 붙은 속성까지 왼쪽에서 오른쪽으로 읽으세요.

FAQ

자주 묻는 질문

Access 프로시저에서 Me는 무엇을 뜻하나요?

코드가 실행되는 현재 폼 또는 보고서의 인스턴스를 뜻합니다. 현재 폼 모듈의 컨트롤은 Me!컨트롤명으로 참조할 수 있지만 표준 모듈에서는 Me를 사용할 수 없습니다.

Me!컨트롤명과 Forms!폼이름!컨트롤명의 차이는 무엇인가요?

Me!컨트롤명은 현재 폼 모듈 안에서 그 폼의 컨트롤을 가리킵니다. Forms!폼이름!컨트롤명은 다른 폼이나 표준 모듈에서 현재 열려 있는 특정 폼의 컨트롤을 전체 경로로 가리킵니다.

Forms!폼이름 참조가 작동하지 않는 이유는 무엇인가요?

대상 폼이 닫혀 있거나 폼·컨트롤의 실제 이름을 화면 캡션과 혼동했을 가능성이 큽니다. Forms 컬렉션에는 현재 열려 있는 폼만 포함됩니다.

하위 폼의 컨트롤은 어떻게 참조하나요?

메인 폼에서 하위 폼 컨트롤을 찾고 .Form으로 내부 폼 개체를 건넌 뒤 컨트롤을 붙입니다. 예시는 Forms!메인폼!하위폼컨트롤.Form!내부컨트롤 구조입니다.