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

컴활 1급 · Access 프로시저

컴활 1급 DoCmd.OpenForm은 폼 이름과 WhereCondition 자리부터 잡으면 덜 헷갈립니다

두음 암기는 `폼뷰필조·데윈오`입니다. FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs의 앞글자를 순서대로 붙인 말입니다.

재미 문장은 `폼 뷰 필터 조건 보고, 데이터 창문 열어 오픈 인수를 건넨다`입니다. 문장은 기억용이고, 시험장에서는 `폼 이름은 필수, 조건은 네 번째, 중간 인수를 생략하면 쉼표를 남긴다`로 번역하세요.

결론부터 말하면 특정 레코드만 보이게 폼을 열 때는 `DoCmd.OpenForm "폼명", , , "조건식"`을 씁니다. Microsoft Learn 기준으로 WhereCondition은 `WHERE`라는 단어를 뺀 유효한 SQL WHERE 절이며, 위치가 흔들리면 `WhereCondition:=` 이름 있는 인수로 쓰는 편이 안전합니다.

컴활 1급 DoCmd OpenForm 인수 순서와 WhereCondition 숫자 문자 날짜 조건을 정리한 인포그래픽
OpenForm은 FormName이 필수이고 WhereCondition은 네 번째 인수이며, 숫자·문자·날짜 조건의 구분 기호를 맞춰야 합니다.
작성에관스 컴활 1급 학습팀 발행2026년 8월 6일 수정2026년 8월 23일 주제Access 프로시저

핵심 포인트

이 글에서 먼저 챙길 것

  • OpenForm의 일곱 인수 중 필수는 첫 번째 FormName이고 나머지는 선택 인수입니다.
  • WhereCondition은 네 번째 인수이므로 View와 FilterName을 생략해도 그 자리를 나타내는 쉼표는 남겨야 합니다.
  • 숫자는 그대로, 문자는 작은따옴표 안에, 날짜·시간은 `#` 안에 들어간 최종 조건 문자열을 만듭니다.
  • FilterName은 저장된 쿼리 이름, WhereCondition은 폼을 열 때 직접 적용할 조건이라는 차이가 있습니다.
  • OpenArgs는 필터가 아니라 열린 폼의 `OpenArgs` 속성으로 전달할 문자열입니다.

본문

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

이 글이 필요한 사람

컴활 1급 데이터베이스 실기에서 명령 단추를 클릭해 다른 폼을 여는 프로시저만 나오면 쉼표 개수와 조건식 따옴표 때문에 멈추는 사람에게 맞는 글입니다.

프로시저 전체 풀이 순서는 기존 `프로시저 문제 푸는 순서` 글이 맡고, 현재 폼과 다른 열린 폼의 컨트롤 경로는 `Me·Forms! 참조` 글이 맡습니다. 이 글은 DoCmd.OpenForm 한 줄과 그 일곱 인수만 좁게 다룹니다.

특히 `주문번호가 같은 레코드만 표시`, `선택한 고객의 폼 열기`, `새 레코드 입력 상태로 열기` 같은 지시문을 코드 한 줄로 옮기는 연습에 집중합니다.

두음 암기부터 잡으세요: 폼뷰필조·데윈오

`폼뷰필조·데윈오`는 FormName·View·FilterName·WhereCondition·DataMode·WindowMode·OpenArgs의 순서입니다. 한글 뜻으로는 폼 이름·보기·필터 이름·조건·데이터 모드·창 모드·전달 인수입니다.

모든 인수를 매번 쓰는 것은 아닙니다. 하지만 네 번째 WhereCondition이나 일곱 번째 OpenArgs만 쓸 때는 앞자리 구조를 알아야 생략 쉼표를 정확히 놓을 수 있습니다.

시험 직전에는 일곱 이름을 길게 외우기보다 `폼은 첫째, 조건은 넷째, 오픈 인수는 끝` 세 지점부터 고정하세요.

공식 구문에서 필수 인수는 FormName 하나입니다

Microsoft Learn의 공식 구문은 `DoCmd.OpenForm(FormName, View, FilterName, WhereCondition, DataMode, WindowMode, OpenArgs)`입니다. 이 중 FormName만 필수이고 나머지 여섯 인수는 선택입니다.

그냥 폼만 열면 `DoCmd.OpenForm "주문폼"`으로 충분합니다. 폼 보기가 기본값인 acNormal이고 별도 필터나 데이터 모드를 요구하지 않으면 선택 인수를 억지로 채울 필요가 없습니다.

지시문에서 폼 이름을 정확히 옮기는 것이 첫 번째 검토입니다. 캡션처럼 화면에 보이는 글자와 실제 폼 개체 이름이 다를 수 있으므로 탐색 창이나 속성 시트의 이름을 확인하세요.

WhereCondition이 네 번째라서 생략 쉼표가 두 칸 필요합니다

WhereCondition 앞에는 View와 FilterName이 있습니다. 두 인수를 생략하고 조건만 넣는다면 `DoCmd.OpenForm "주문폼", , , "[주문번호] = 7"`처럼 빈자리를 쉼표로 표시합니다.

쉼표를 하나 덜 쓰면 조건 문자열이 WhereCondition이 아니라 FilterName 자리로 이동합니다. 그러면 Access는 조건식을 저장된 필터나 쿼리 이름처럼 해석하려고 하므로 의도한 레코드 제한이 되지 않습니다.

쉼표가 헷갈릴 때는 `DoCmd.OpenForm FormName:="주문폼", WhereCondition:="[주문번호] = 7"`처럼 이름 있는 인수를 쓰세요. 인수 이름을 명시하면 중간 빈자리를 세지 않아도 됩니다.

FilterName과 WhereCondition의 역할을 나누세요

FilterName은 현재 데이터베이스에 저장된 유효한 필터 또는 쿼리 이름을 지정하는 자리입니다. 이미 만들어 둔 쿼리로 폼의 레코드를 제한할 때 씁니다.

WhereCondition은 폼을 여는 순간 직접 조건식을 전달하는 자리입니다. `[부서코드] = 3`이나 `[지역] = '서울'`처럼 SQL WHERE 절에서 `WHERE`만 뺀 내용을 문자열로 만듭니다.

짧은 단일 조건을 그때그때 적용하면 WhereCondition이 읽기 쉽고, 여러 필드와 긴 계산이 반복된다면 저장 쿼리나 필터가 관리하기 편할 수 있습니다. 시험에서는 지시문이 어떤 방식을 요구하는지 먼저 따르세요.

숫자 조건은 값에 따옴표를 붙이지 않습니다

숫자 필드의 고정값 조건은 `"[주문번호] = 7"`처럼 씁니다. 컨트롤 값을 붙인다면 `"[주문번호] = " & Me!txt주문번호`처럼 문자열 바깥에서 값을 연결합니다.

예를 들어 현재 폼의 주문번호와 같은 레코드만 열려면 `DoCmd.OpenForm "주문폼", , , "[주문번호] = " & Me!txt주문번호`가 됩니다.

검토할 때는 최종 조건 문자열을 머릿속으로 완성하세요. 컨트롤 값이 7이라면 Access에 전달되는 결과가 `[주문번호] = 7`처럼 보여야 합니다.

문자 조건은 최종 값이 작은따옴표 안에 있어야 합니다

Microsoft Learn은 문자 조건에서 문자열 안의 텍스트 값을 작은따옴표로 구분하는 방식을 안내합니다. 고정값은 `"[지역] = '서울'"`처럼 전체 조건 문자열 안에 작은따옴표를 둡니다.

컨트롤 값을 연결하면 `"[지역] = '" & Me!txt지역 & "'"`처럼 값의 앞뒤에 작은따옴표가 남도록 조립합니다. 컨트롤 값이 서울이면 최종 결과는 `[지역] = '서울'`이어야 합니다.

문자 조건 오류는 VBA 코드의 큰따옴표와 조건값의 작은따옴표를 같은 역할로 보는 데서 생깁니다. 바깥 큰따옴표는 VBA 문자열, 안쪽 작은따옴표는 Access가 문자값임을 알아보는 구분자입니다.

날짜 조건은 최종 날짜값을 #으로 감쌉니다

Access의 날짜·시간 조건은 날짜값을 `#` 기호 안에 넣습니다. 고정 날짜라면 `"[주문일] >= #8/1/2026#"`처럼 조건 문자열을 만듭니다.

폼 컨트롤 값을 연결할 때는 `"[주문일] >= #" & Me!txt기준일 & "#"`처럼 날짜값 앞뒤의 `#`가 최종 문자열에 남아야 합니다.

날짜 표시는 실행 환경의 지역 형식에 영향을 받을 수 있으므로 실제 실습에서는 최종 조건 문자열을 확인하고 문제 파일의 예시 형식을 따르세요. 시험용 핵심은 날짜·시간 값의 `#` 구분입니다.

DataMode·WindowMode·OpenArgs는 필터와 다른 역할입니다

DataMode는 폼을 데이터 추가, 편집, 읽기 전용 같은 상태로 열지 정합니다. 예를 들어 새 레코드 입력 전용 요구라면 acFormAdd, 읽기 전용 요구라면 acFormReadOnly 같은 AcFormOpenDataMode 상수를 확인합니다.

WindowMode는 일반 창인지 대화상자 형태인지 같은 창 표시 방식을 정합니다. acWindowNormal과 acDialog를 WhereCondition과 섞지 말고, 지시문에 팝업·대화상자처럼 열라는 요구가 있을 때만 해당 자리를 봅니다.

OpenArgs는 열린 폼에 문자열을 넘기는 마지막 인수입니다. 전달한 값은 열린 폼의 코드에서 `Me.OpenArgs`로 읽을 수 있습니다. 레코드를 거르는 WhereCondition과 폼 코드에 값을 건네는 OpenArgs를 구분하세요.

시험 직전에는 오류 제거 순서를 6줄로 남기세요

첫째, 두음 암기는 `폼뷰필조·데윈오`입니다. 둘째, 필수 인수는 FormName 하나입니다. 셋째, WhereCondition은 네 번째이고 `WHERE` 단어는 쓰지 않습니다.

넷째, 숫자는 그대로, 문자는 작은따옴표, 날짜는 `#`입니다. 다섯째, 생략 자리가 헷갈리면 `WhereCondition:=` 이름 있는 인수로 씁니다.

여섯째, OpenArgs는 필터가 아니라 열린 폼으로 전달하는 문자열입니다. 코드를 다 쓴 뒤에는 폼 개체 이름, 컨트롤 이름, 최종 조건 문자열, 저장과 실행까지 확인하세요.

FAQ

자주 묻는 질문

DoCmd.OpenForm에서 WhereCondition은 몇 번째 인수인가요?

네 번째 인수입니다. FormName 뒤의 View와 FilterName을 생략하고 위치 방식으로 쓰면 `DoCmd.OpenForm "폼명", , , "조건식"`처럼 두 빈자리를 쉼표로 남깁니다.

WhereCondition에 WHERE를 같이 써야 하나요?

쓰지 않습니다. Microsoft Learn 기준으로 WhereCondition은 `WHERE`라는 단어가 빠진 유효한 SQL WHERE 절입니다. 예시는 `[주문번호] = 7`입니다.

Access OpenForm 문자 조건에서 따옴표는 어떻게 쓰나요?

최종 조건 문자열에서 문자값이 작은따옴표 안에 들어가야 합니다. 컨트롤 값이라면 `"[지역] = '" & Me!txt지역 & "'"`처럼 앞뒤 작은따옴표를 문자열에 포함합니다.

WhereCondition과 OpenArgs의 차이는 무엇인가요?

WhereCondition은 열리는 폼에 표시할 레코드를 제한합니다. OpenArgs는 열린 폼의 `OpenArgs` 속성으로 전달해 폼 코드에서 읽는 문자열입니다.