영상에서 설명해주신대로 그 폼에 있는 컨트롤명으로 조건을 지정하는 것이 아니라 그 폼의 하위폼에 해당하는 컨트롤명으로 조건을 지정할때, 프로시저에서는 [forms]![그 폼][그 폼의 하위폼] 이런 식으로 조건을 작성해야 한다.라는 것은 이해가 되는데요.
만약에 매크로에서 openreport를 사용하여 필드명이 그 폼의 하위폼에 해당하는 컨트롤명이랑 같은 것만을 이라는 형식으로 문제가 나오면 아까와 같이 [필드명]=[forms]![그 폼][그 폼의 하위폼] 이런 식으로 지정하면 될까요?
그리고 만약에 d~함수에서 그폼의 하위 폼에 해당하는 컨트롤명에 해당하는 필드명에 해당하는 ~ 과 같은 형식으로 나오면 ex) dsum("필드","테이블 or 쿼리","필드=그폼의 하위폼의 컨트롤명") 이런 식으로 앞서 프로시저와 매크로와는 다르게 그냥 하위폼에 있는 컨트롤명으로 지정해줘도 될까요?
질문이 많네요;;
안녕하세요.
예, 맞습니다.
1. 매크로(OpenReport)에서의 하위 폼 참조
매크로의 Where 조건문에서 하위 폼의 컨트롤을 참조할 때, 실장님이 생각하신 방향이 맞습니다. 하지만 문법을 아주 조금만 더 정교하게 다듬어야 합니다.
올바른 형식: [필드명] = [Forms]![기본폼명]![하위폼컨트롤명].Form![컨트롤명]
주의사항: .Form 추가: 기본 폼 안에 있는 것은 '하위 폼' 자체가 아니라 하위 폼을 담고 있는 '그릇(컨트롤)'입니다. 그 그릇 안에 담긴 실제 폼의 컨트롤을 부르려면 반드시 중간에 .Form을 써주어야 엑셀이 "아, 그릇 안에 있는 폼으로 들어가라는 거구나!"라고 알아듣습니다.
구분 기호 : 말씀대로 매크로 작성기(필드 작성기)를 이용할 때는 문자(')나 날짜(#) 구분 기호를 직접 쓰지 않아도 엑셀이 자동으로 인식하는 경우가 많습니다.
2. 도메인 함수(DSum, DLookup 등)에서의 참조
결론부터 말씀드리면 "도메인 함수도 프로시저와 마찬가지로 전체 경로를 다 써주는 것이 원칙"입니다.
잘못된 예: DSum("필드", "테이블", "필드 = [하위폼컨트롤명]") (← 엑셀이 이 컨트롤이 어디에 붙어 있는지 찾지 못해 오류가 납니다.)
올바른 예: DSum("필드", "테이블", "필드 = " & [Forms]![기본폼]![하위폼컨트롤].Form![컨트롤])
즐거운 하루 되세요.
-
관리자2026-05-12 09:22:52
안녕하세요.
예, 맞습니다.
1. 매크로(OpenReport)에서의 하위 폼 참조
매크로의 Where 조건문에서 하위 폼의 컨트롤을 참조할 때, 실장님이 생각하신 방향이 맞습니다. 하지만 문법을 아주 조금만 더 정교하게 다듬어야 합니다.
올바른 형식: [필드명] = [Forms]![기본폼명]![하위폼컨트롤명].Form![컨트롤명]
주의사항: .Form 추가: 기본 폼 안에 있는 것은 '하위 폼' 자체가 아니라 하위 폼을 담고 있는 '그릇(컨트롤)'입니다. 그 그릇 안에 담긴 실제 폼의 컨트롤을 부르려면 반드시 중간에 .Form을 써주어야 엑셀이 "아, 그릇 안에 있는 폼으로 들어가라는 거구나!"라고 알아듣습니다.
구분 기호 : 말씀대로 매크로 작성기(필드 작성기)를 이용할 때는 문자(')나 날짜(#) 구분 기호를 직접 쓰지 않아도 엑셀이 자동으로 인식하는 경우가 많습니다.
2. 도메인 함수(DSum, DLookup 등)에서의 참조
결론부터 말씀드리면 "도메인 함수도 프로시저와 마찬가지로 전체 경로를 다 써주는 것이 원칙"입니다.
잘못된 예: DSum("필드", "테이블", "필드 = [하위폼컨트롤명]") (← 엑셀이 이 컨트롤이 어디에 붙어 있는지 찾지 못해 오류가 납니다.)
올바른 예: DSum("필드", "테이블", "필드 = " & [Forms]![기본폼]![하위폼컨트롤].Form![컨트롤])
즐거운 하루 되세요.