• 최초 작성일: 2000-06-03
  • 최종 수정일: 2026-09-30
  • 조회수: 18 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: UserForm활용하기

들어가기 전에

오래 전 엑셀 파일로 진행하던 강의를 웹 글로 복원한 것이라, "버튼을 눌러보세요"처럼 엑셀에서 직접 조작하라는 표현이 남아 있을 수 있습니다. 결과는 본문의 그림이나 표로 확인하실 수 있으며, 현재와 맞지 않는 내용은 보완하되 전반적인 스타일은 당시의 갬성(?)을 유지했습니다.

윈도우 응용프로그램의 가장 중요한 인터페이스는 아마 Dialog Box(대화상자)가 아닌가 싶습니다.

거의 모든 응용 프로그램(소프트웨어)에서 이 대화상자를 사용을 하고 있습니다. 예를 들어, Excel에서 "도구-옵션" 메뉴를 선택하면 화면표시/계산/편집/… 등 8개의 탭을 가진 "옵션" 대화상자가 나타나고, "서식-셀" 메뉴를 선택하게 되면 표시형식/ 맞춤/글꼴 등 6개의 탭을 가진 "셀 서식 대화상자가" 나타납니다. 이것 외에도 수많은 종류의 대화상자가 있어서, 사용자가 어떤 조작을 하게되면 각각의 상황에 맞는 대화상자가 나타나서 사용자의 작업 편의를 도와주고 있지요.

이번 강좌에서부터 배워볼 내용은 바로 이 대화상자를 직접 만들어 보는 것입니다. 아마 이 부분은 VB Programming에 있어서 백미라 할 만큼 재미도 있고 유용하게 사용될 것입니다.

Excel 95 버전까지는 다이얼로그시트(Dialog Sheet)라는 이름으로 사용되었는데 97 버전으로 넘어오면서부터 유저폼(UserForm)으로 바뀌게 되었습니다. 이름만 바뀐게 아니라 Active-X 컨트롤을 대화상자에서 사용할 수 있게 되는 등, 가히 획기적으로 성능이 향상 되었습니다(물론 이전 자료와의 호환 등을 위해 기존의 다이얼로그 시트도 사용할 수는 있습니다).

95버전까지는 엑셀 본연의 기능이 30, VBA 기능이 70 이었다면, 97버전부터는 이 비중이 완전히 뒤바뀌었습니다. 저는 처음 Excel 97버전의 VBA를 보았을 때, 그동안 VBA를 써왔음에도 불구하고 한참을 쳐다보아야 했습니다. 편리하면서도 막강한 각종 개체들, 편리한 사용법 등 엄청나게 발전된, 완전히 새로운 개념, 새로운 Interface 등으로 인해서 말이지요.

권현욱(엑셀러)
저자: 권현욱(엑셀러), 아이엑셀러 대표

필자는 Excel 컨설턴트, 작가, 그리고 크리에이터입니다. 현재 Microsoft Excel MVP이며, 『챗GPT+엑셀 업무자동화 정석』을 비롯한 10여 권의 도서를 집필했습니다. Excel 자동화 및 생산성 향상 분야에서 25년 넘는 경력을 보유하고 있습니다.

권현욱(엑셀러) 님의 최신 포스트:
  • 최신 글을 불러오는 중...


26년 경력 Microsoft MVP 권현욱(엑셀러) 대표 직강 1강 무료

🎁 파워툴스 마스터클래스 · 엑셀 바이브 코딩

AI에게 말로 지시해서 '나만의 엑셀 도구'를 만들고 리본에 장착합니다.

  • 코딩 지식 없이 시작 · 코드는 AI가 작성
  • 엑셀 리본에 내 탭과 버튼을 만들고 XLAM으로 공유
  • 1강 무료 수강 가능
수강 신청하기 강의 소개 보기

UserForm활용하기

핵심 요약: UserForm과 컨트롤

UserForm은 삽입 → 표시 코드 작성 → 컨트롤 추가 → 속성 조정 → 이벤트 코드 작성의 5단계로 만들며, 화면에는 Show 메서드로 띄웁니다.

  • 삽입: VB Editor에서 [삽입-사용자 정의 폼]을 선택합니다.
  • 표시: 일반 모듈에 UserForm1.Show를 실행하는 프로시저를 작성합니다.
  • 메서드: Show는 표시, Hide는 잠시 숨김, Unload는 완전히 제거합니다.
  • 컨트롤: 도구 상자에서 용도에 맞는 컨트롤을 골라 폼에 배치합니다.

Step 1: UserForm을 작성하는 5단계

유저폼을 사용하는 가장 전형적인 순서에 대해 먼저 살펴보도록 하지요.

  1. UserForm을 워크북에 삽입합니다.
  2. UserForm이 화면상에 나타나도록 하는 코드(프로시저)를 작성합니다.
  3. 유저폼에 컨트롤(들)을 추가시킵니다.
  4. 각 컨트롤의 속성(프로퍼티, Property)을 용도에 맞게 조정합니다.
  5. 각 컨트롤의 이벤트 핸들러 프로시저 또는 일반 모듈에 필요한 코드를 작성합니다.

이 때, 이 프로시저는 (general)VBA 모듈, 그러니까 지금까지 우리가 작업을 해왔던 일반 모듈에다가 작성을 합니다. Excel 97 이전까지는 이것 밖에 없었는데 97로 넘어 오면서 이 VBA 모듈(일반 모듈)말고 또 한가지가 더 생겼습니다.

코드 모듈(Code Module)이라고 하는 것이 바로 그것이지요. 이것은 나중에 자세히 설명을 드리겠지만 이벤트 핸들러 모듈(Event Handler Module)이라고도 하는 것으로 각 시트, 워크북에 붙어서 특수한 이벤트를 처리할 때 요긴하게 쓸 수 있는 좀 특수한 모듈입니다(강좌를 진행하면서 수도 없이 나오므로 그냥 그렇게만 알아두세요).

Step 2: UserForm 직접 만들어 보기

백문이 불여일견이므로 사설은 이쯤에서 접어두고…

UserForm 삽입하기

(1) VB Editor를 띄운 상태에서(alt+F11), 워크북 프로젝트(즉 파일)을 선택합니다.

(2) 그런 다음 "삽입-사용자 정의 폼" 메뉴를 클릭합니다. 아래의 그림은 Book2라는 VBAProject를 선택한 다음, 사용자 정의 폼을 하나 삽입한 것입니다.

VB Editor에서 사용자 정의 폼을 삽입한 화면
아이엑셀러

(3) 이렇게 하면 "UserForm1"이라는 유저폼이 하나 생성이 됩니다. "삽입-사용자 정의 폼" 메뉴를 한번씩 선택할 때마다 새로운 유저폼이 만들어집니다. 유저폼을 만드는 방법은 위와 같이 "삽입-사용자 정의 폼" 메뉴를 사용하거나 아이콘 중에서 "사용자 정의 폼 삽입" 아이콘을 클릭하면 됩니다.

VB Editor의 사용자 정의 폼 삽입 아이콘
아이엑셀러

UserForm을 띄우는 프로시저 작성하기

(4) 이번에는 "삽입-모듈" 메뉴를 선택해서 모듈시트를 하나 만들어 줍니다. (5) 그런 다음에 아래와 같은 프로시저를 만듭니다.

Sub ShowForm()
    UserForm1.Show
End Sub

참고로, 유저폼을 화면상에 나타내고자 할 때에는 위와 같이 Show 방법(메서드)을 사용합니다. 반대로, 완전히 없애고 싶을 때에는 Unload, 잠시 화면상에서 감추고 싶을 때에는 Hide 메서드를 사용합니다

참고: 최근 버전의 Excel에서는 "삽입-사용자 정의 폼" 메뉴가 VB Editor의 [삽입-사용자 정의 폼]으로 그대로 남아 있고, 매크로 실행은 "도구-매크로-매크로" 대신 Alt+F8 또는 [개발 도구] 탭의 [매크로]를 사용합니다. 또한 UserForm1.Show는 기본적으로 모달(Modal) 방식이므로 폼을 닫기 전에는 시트 작업을 할 수 없습니다.

프로시저 실행하기

(6) "도구-매크로-매크로" 메뉴를 차례로 클릭하면 매크로 선택 대화상자가 나오는데 여기서 ShowForm을 선택하고 "실행" 버튼을 누릅니다. 그러면 좀전에 (2)번 단계에서 만들어 둔 유저폼이 화면상에 나타날 것입니다. 물론 현 단계에서는 단순히 유저폼만 하나 만들었을 뿐, 콤보박스나 버튼 등과 같은 컨트롤 (이것을 정식용어로는 Active-X Control이라고 부릅니다)을 하나도 부착하지 않았기 때문에 회색 빈 바탕의 유저폼만 하나 덩그러니 표시가 될 것입니다.

일단 여기서 기억하실 사항은 유저폼과 모듈시트를 만드는 방법, 그리고 유저폼을 화면상에 띄울 때에는 Show라는 방법(메서드, Method)을 사용한다는 사실입니다.

Step 3: 컨트롤의 종류와 특징

이제 각 컨트롤의 특징에 대해 알아보도록 하지요. 제 경우에는 컨트롤을 하나 추가를 했기 때문에 17개인데 아마 여러분의 경우에는 16개의 컨트롤이 나타날 것입니다. 휘하에 부하가 아무리 많아도 개개인의 성질머리를 잘 알아야 적재적소에 배치를 하고 일을 시키듯이, 이 16개 컨트롤의 성질을 잘 알아야 일을 시켜도 시키겠지요?

1. 개체선택 컨트롤(화살표)

말 그대로 유저폼 내에 있는 개체들을 선택할 때 사용하는 것입니다. 선택기능 이외의 다른 특별한 기능이 있는 것은 아닙니다.

2. 레이블(Label)

유저폼 상에 텍스트를 뿌려줄 때 사용하는 컨트롤입니다. 즉 유저폼의 특정 위치에 문자열 등을 표시하고자 할 때 사용합니다.

3. 텍스트 상자(TextBox)

사용자가 텍스트를 입력할 수 있도록 해주는 컨트롤입니다.

4. 콤보 상자(ComboBox)

일명 드롭다운 박스라고도 하며, 한번에 한개씩의 아이템을 보여줍니다. 외관상으로는 목록상자와 비슷하게 생겼는데 차이점은 콤보 상자의 경우, 사용자가 아이템에 나타나지 않은 값을 직접 입력해 줄 수 있다는 것입니다.

5. 목록 상자(ListBox)

사용자가 여러 가지 아이템 중에서 선별해서 값을 입력할 수 있도록 해 줍니다.

6. 확인란(CheckBox)

체크박스라고도 하며, 사용자로 하여금 두 가지 중 하나, 즉 예/아니오, 참/거짓, On/Off 중에서 하나를 선택하도록 할 때 사용합니다.

7. 옵션 단추(OptionButton)

라디오 버튼이라고 부르던 것으로 사용자가 (여러) 아이템들로부터 선택할 수 있도록 하는 컨트롤입니다. 옵션 단추를 쓰기 위해서는 두 개 또는 그 이상의 그룹의 형태로 사용하는 것이 보통입니다.

8. 토글 단추(ToggleButton)

토글버튼 컨트롤은 두 가지 상태(즉 On 아니면 Off)를 가집니다. 즉 프로그램 내에서 참이면 어떠어떠한 조건을, 거짓이면 또다른 이러저러한 조건들을 선택하도록 할 때 사용하는 컨트롤입니다(개인적으로 이 토글단추는 잘 사용하지 않습니다. 그 대신에 두 개의 옵션단추를 활용하곤 합니다).

9. 프레임(Frame)

프레임 컨트롤은 크게 두 가지의 용도로 사용합니다. 한 가지는미관상의 이유로, 다른 한 가지는 몇 개의 컨트롤들을 논리적인 하나의 그룹으로 지정할 때 사용하게 됩니다. 먼 소린지는 조금 있다가 실제로 만들어 보면 저절로 아시게 될 것입니다.

이 프레임 컨트롤은 다이얼로그 박스에 한 세트 이상의 옵션 단추 컨트롤이 있을 때 매우 유용하다는 사실만 염두에 두시기 바랍니다.

10. 명령 단추(CommandButton)

대부분의 다이얼로그 박스는 적어도 하나 이상의 명령 단추를 가지고 있을 것입니다. [확인]이니, [취소]니 하는 버튼들이 바로 이 명령 단추이지요.

11. 연속탭(TabStrip)

이 연속탭은 겉으로 보기에는 다중 페이지와 흡사합니다. 하지만 사용하기는 훨씬 더 까다로운 반면 기능은 다중 페이지보다 떨어집니다. 그래서 거의 사용하지 않습니다. 다중 페이지라는 뛰어난 컨트롤이 있는데 왜 이런 불편한 컨트롤을 만들어 두었는지 의문이 듭니다. 아마 차기 버전에서는 이 컨트롤을 빼버리지 않을까 추측해 봅니다. ^^

12. 다중 페이지(Multipage)

다중 페이지는 여러 개의 탭을 가진 다이얼로그 박스를 만들 때 사용할 수 있는 컨트롤 입니다. 위에서도 설명드렸듯이 "도구-옵션" 메뉴를 선택하면 화면표시/계산 등 8개의 탭을 가진 대화상자가 나타나는데 다중 페이지 컨트롤을 사용하면 이와 같은 모양을 쉽게 구현할 수 있습니다.

13. 스핀 단추(SpinButton)

스핀 단추 컨트롤은 두 개의 화살표 단추를 가지고 있으며 이것을 클릭하면 숫자가 증가 또는 감소됩니다. 스핀 단추는 텍스트 박스나 레이블과 함께 사용될 수도 있습니다.

"파일-인쇄" 메뉴를 눌러보면 "인쇄할 페이지", "인쇄매수"란이 있지요? 아래/위 화살표를 누르면 숫자가 증가 또는 감소하게 되어 있는데 이것이 바로 스피너 즉 스핀 단추입니다.

14. 스크롤 막대(ScrollBar)

스크롤 막대는 스핀 단추와 비슷한 기능을 수행합니다. 차이점이 있다면, 스핀 단추는 한번에 1씩밖에 증감시킬 수 없지만 스크롤 막대는 한꺼번에 여러 단계를 증감시킬 수 있다는 정도의 차이일 것입니다.

15. 이미지(Image)

이미지 컨트롤은 그래픽 이미지를 UserForm에 포함시킬 때 사용하는 컨트롤입니다. 외부파일이나 클립보드로 부터 붙여넣을 수 있으며, 한번 다이얼로그 박스에 붙여넣은 다음에는 원본 그림파일은 없어도 상관없습니다.

16. RefEdit

이 컨트롤은 사용자가 워크시트 내의 어떤 범위를 마우스(또는 키보드)로 입력할 수 있도록 할 때 사용합니다. 함수나 피벗테이블을 사용할 때 어느 단계에 가면 아래 그림과 같은 모양이 생기는데 이 부분을 클릭하면 원하는 영역을 마우스로 지정을 해 줄 수가 있지요? 바로 이런 기능을 가능하게 해주는 컨트롤이 RefEdit 컨트롤 입니다.

RefEdit 컨트롤과 같은 영역 선택 아이콘
아이엑셀러

참고: RefEdit 컨트롤은 폼을 여러 번 열고 닫거나 다른 컨트롤과 함께 쓰면 오류가 나는 등 불안정한 것으로 알려져 있습니다. 셀 범위만 입력받으면 되는 경우에는 Application.InputBox(Prompt, Type:=8)을 대안으로 사용하시는 것이 안전합니다.

마무리

각 컨트롤의 특징들만 간략하게 살펴보았는데 분량이 좀 많군요. 본격적인 UserForm 사용법은 다음 시간부터 설명드려야 할 것 같습니다.

"이런 기능 아세요?"를 통해 Excel에 대해 설명을 드릴 때에도 그랬었지만 'VB(A)를 배우려면 어떠 책이 좋겠느냐?'는 질문을 해오시는 분이 몇 분 있더군요. 저의 대답은 그 때나 지금이나 똑같습니다.

즉 "VBA의 도움말과 본 강좌파일만 보시면 충분합니다!!!" 사실 시중에 나와 있는 책이라는 것들은 대개가 이 도움말의 순서를 이렇게 저렇게 바꾸어 놓은 것에 지나지 않습니다.

본 강좌는 비록 공짜이지만 많은 예제와 실무 경험을 바탕으로 그 어느 책보다 쉽게 VBA를 배우실 수 있으리라 생각합니다. 괜히 다른 사람들의 말에 현혹되어 시간낭비, 돈낭비 하지 마시기를…

오늘은 여기까지…

정리 — 주요 컨트롤 요약

컨트롤 용도 비고
레이블(Label) 텍스트 표시
텍스트 상자(TextBox) 텍스트 입력
콤보 상자(ComboBox) 드롭다운, 직접 입력 가능 목록 상자와 차이
목록 상자(ListBox) 여러 아이템 중 선택
확인란(CheckBox) 두 가지 중 하나 선택 예/아니오, On/Off
옵션 단추(OptionButton) 여러 항목 중 선택 프레임으로 그룹화
명령 단추(CommandButton) [확인], [취소] 버튼
다중 페이지(Multipage) 탭이 있는 대화상자 연속탭보다 권장
스핀 단추(SpinButton) 1씩 증감 스크롤 막대는 여러 단계 증감
RefEdit 워크시트 범위 선택

자주 묻는 질문 (FAQ)

Q1. UserForm을 화면에 띄우려면 어떻게 하나요?

일반 모듈에 UserForm1.Show를 호출하는 프로시저를 작성하고 실행합니다.

Q2. Hide와 Unload는 어떻게 다른가요?

Hide는 UserForm을 잠시 화면에서 감추고, Unload는 완전히 없앱니다.

Q3. 콤보 상자와 목록 상자의 차이는 무엇인가요?

콤보 상자는 목록에 없는 값을 사용자가 직접 입력할 수 있습니다.

마치며

본격적인 UserForm 사용법은 다음 시간부터 이어서 설명드립니다.