이 글이 필요한 사람
컴활 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는 필터가 아니라 열린 폼으로 전달하는 문자열입니다. 코드를 다 쓴 뒤에는 폼 개체 이름, 컨트롤 이름, 최종 조건 문자열, 저장과 실행까지 확인하세요.