• 최초 작성일: 2001-07-25
  • 최종 수정일: 2026-09-30
  • 조회수: 12 회
  • 작성자: 권현욱 (엑셀러)
  • 강의 제목: 사용자정의 메뉴에 대하여

들어가기 전에

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

독자 한 분께서 보내 주신 메일의 일부입니다. (보내신 분의 이름과 ID는 가렸습니다.)

Exceller님! 축하해 주십시오.
제가 드디어 선생님의 강좌를 뒤쫓아 왔습니다.
이제 여유롭게 올라오는 강좌를 차분히 심도있게 공부하고자 합니다
바삐 따라오다 보니 어느 강좌에서던가 어느 분이 저와 너무도 닮은
생각과 그리고 똑같은 질문을 한 사람이 있어 희안한 일도 있구나 했습니다.
하루가 지나고 출근 전, 밭을 둘러보며 다시 생각해 보니 아무리 생각해 봐도
그것은 제가 한 질문인 것이 확실한 것 같습니다.

어는 덧 제가 젊은 층에서 멀어져 가는 나이가 되었습니다.
선생님 덕분에 엑셀의 활용에 많은 진전을 가져온 것 같아 무한히 감사를
드립니다.
주위를 살펴보면 엑셀의 깊은 맛을 모르는 사람이 태반인 것 같아요.
엑셀에 매달려 있는 제가 별종이 되고 있습니다.
... (중략)... 바삐 쫓아오다 보니 강좌를 눈으로 이해하는데 급급해서
직접 응용하려면 앞부터 캄캄해져요.
이제 저도 여유로와서 선생님의 강좌를 기다리며 공부하는 느긋함을
만끽하며 이만 줄입니다.

2년 이상 강좌를 진행하면서 강좌를 보시는 계층이 참으로 다양하다는 생각이 듭니다. 병원에서 인턴 또는 원무과 일을 담당하시는 분, 건설 현장에서 자재 관리를 하시는 분, 농사를 지으시며 틈틈이 엑셀 공부를 하시는 분, 사무직에 종사하시는 분, 경리 업무를 담당하시는 분, 개인 사업을 하시는 분, 심지어는 전직(?)으로 일수 놀이를 하시는 분 등등...

한 가지 분명한 사실은 엑셀은 단순히 계산이나 대신해 주는 수치계산 프로그램이 아니라는 것입니다. 얼마나 창의적으로 활용하느냐에 따라 그 사용 방법은 사용자 능력에 따라 천차만별입니다. 정확한 비유가 될 지는 모르겠지만, 아침 이슬을 뱜이 먹으면 독이 만들어 지고 젖소가 먹으면 우유가 생성되지요? 엑셀도 비슷하다고 생각합니다. 컴퓨터(엑셀)을 그저 값비싼 전자계산기 대용으로만 쓰고 있다면 엑셀은 천덕꾸러기 취급을 받을테지만 자신의 주변을 잘 정리정돈하고 업무를 분석하기를 좋아하는 사람에게 있어서는 여의주가 될 테니까요.

먼 얘기를 하다가 또 여기까지...

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

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

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


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

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

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

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

사용자정의 메뉴에 대하여

핵심 요약: 사용자 정의 메뉴 만들기

워크시트 메뉴 표시줄에 팝업 컨트롤과 하위 버튼을 추가하고 OnAction으로 실행할 매크로를 연결하며, Reset으로 초기화합니다.

  • 1단계: CommandBars("worksheet menu bar")를 지정하고 기존 메뉴를 삭제합니다.
  • 2단계: msoControlPopup 컨트롤과 하위 msoControlButton을 추가합니다.
  • 3단계: Caption, OnAction, FaceId 속성을 지정하고 Reset으로 되돌립니다.

Step 1: 사용자 정의 메뉴란

본론으로 들어가서... 사용자 정의 메뉴에 대해 질문을 해 오신 분이 심심찮게 있으므로 별도의 강좌를 통해 설명을 드릴까 합니다. 유저 인터페이스(User Interface)에는 여러 가지 종류가 있지만 가장 대표적인 것이 대화상자(Dialog Box)와 오늘 설명드릴 메뉴(ToolBar)라고 할 수 있습니다. 앞으로는 메뉴라는 이름 대신에 툴바라고 부르도록 하겠습니다.

엑셀 97버전으로 넘어오면서 기존 버전에 비해 획기적으로 바뀐 점이 많이 있는데 그 중에는 바로 이 사용자 정의 메뉴를 핸들링하는 부분도 포함이 됩니다. 하지만 아직 우리 주변에는 VBA가 무엇인지도 모르고 살아가는 사람이 대부분이지요. 엑셀(그리고 VBA)이 가진 기능을 30%도 제대로 사용하지 못하는 사람들이 그만큼 많다는 얘기입니다. 자기가 가진 것이 무엇인지도 모른 채 남의 것(즉 다른 것)을 탐하는 일은 없어야 할 것입니다(꼭 성경말씀 같지요? ^^)

일단 아래의 버튼을 눌러 보세요.

고개를 약간 돌려 1시 방향을 샥~ 올려다 보면 기본 메뉴 중에서 도움말 메뉴 오른쪽에 '사용자 정의 메뉴(U)'라는 것이 보이실 것입니다. 그것을 눌러 보세요. 하위 메뉴들이 나타나지요? 이번 시간에는 이것을 만들어 보도록 합니다.

Step 2: 메뉴 만들기 (MakeUserDefinedMenu)

Sub MakeUserDefinedMenu()
    Dim cmdBar As CommandBar
    Set cmdBar = CommandBars("worksheet menu bar")
    On Error Resume Next
    '''커맨드바 오브젝트 변수를 선언해 주었습니다.
    '''worksheet menu bar는 내장(built-in) 메뉴바로 워크시트가 활성화되면 화면에
    '''나타나는 메뉴입니다. 만약 차트 메뉴바에 나타나도록 하려면 이 부분을
    '''Set cmdBar = CommandBars("chart menu bar")로 고쳐주시면 되겠습니다.

    cmdBar.Controls("사용자 정의 메뉴(&U)").Delete
    With cmdBar.Controls.Add(Type:=msoControlPopup, Temporary:=True)
    '''동일한 사용자 정의 메뉴가 이미 만들어져 있는지 확인하여 있으면 삭제합니다.
    '''만약 만들어 진 것이 없다면 "사용자 정의 메뉴(U)"라는 메뉴를 만들고 필요한
    '''컨트롤들을 추가합니다. 이 때 메뉴를 선택하면 그에 딸려 있는 하위 메뉴가
    '''나타나는 구조를 가진 메뉴를 팝업(Pop-up) 메뉴라고 부릅니다. 그래서
    '''Type:=msoControlPopup 입니다.
        .Caption = "사용자 정의 메뉴(&U)"
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "사용자 정의 메뉴1"
            .OnAction = "사용자정의메뉴연습"
            .BeginGroup = True
            .FaceId = 31
            '''추가한 하위 메뉴에 대해 캡션과 OnAction(메뉴를 클릭했을 때 실행될
            '''메뉴 지정), BeginGroup, FaceId 속성 등을 지정합니다.

        End With
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "사용자 정의 메뉴2"
            .OnAction = "사용자정의메뉴연습"
        End With
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "사용자 정의 메뉴3"
            .OnAction = "사용자정의메뉴연습"
        End With
        With .Controls.Add(Type:=msoControlButton)
            .Caption = "메뉴 원래대로(&R)"
            .OnAction = "CallReset"
            .FaceId = 37
            .BeginGroup = True
        End With
    End With
    MsgBox "사용자 정의 메뉴가 만들어 졌습니다//By Exceller"
End Sub

하위 메뉴를 선택했을 때 실행되는 프로시저(OnAction)는 다음과 같이 간단하게 만들 수 있습니다.

Sub 사용자정의메뉴연습()
    MsgBox "선택하신 메뉴는 [" & Application.CommandBars.ActionControl.Caption & "] 입니다", , "메뉴 선택//By Exceller"
End Sub

Step 3: 메뉴 원래대로 되돌리기 (CallReset)

'메뉴 원래대로'라는 하위 메뉴를 선택했을 때 추가된 메뉴를 원래 상태로 되돌리기 위한 코드는 아래와 같습니다.

Sub CallReset()
    Dim Msg As String
    Dim cmdBar As CommandBar
    Set cmdBar = CommandBars("worksheet menu bar")

    Msg = "이 작업은 현존하는 사용자 정의 메뉴를 " & vbCr
    Msg = Msg & "Reset시키는 작업이므로 주의를 요합니다. " & vbCr
    Msg = Msg & "정말 계속하시겠습니까?"
    If MsgBox(Msg, vbYesNo, "메뉴 초기화//By Exceller") = vbNo Then Exit Sub
    cmdBar.Reset
End Sub

엑셀 2007 이후의 리본 화면에서는 이렇게 만든 메뉴가 별도의 "추가 기능" 탭에 나타납니다. 이 강좌는 엑셀 97~2003 시절의 메뉴 표시줄을 기준으로 한 것입니다.

마무리

사용자 정의 메뉴에 대해서는 좀더 살펴보아야 할 사항이 많으므로 다음 강좌시간에 계속해서 다루도록 하겠습니다.

오늘은 여기까지...

정리 — 사용자 정의 메뉴 핵심

구분 사용한 코드 역할
메뉴 표시줄 CommandBars("worksheet menu bar") 워크시트용 메뉴 표시줄
팝업 메뉴 Controls.Add(Type:=msoControlPopup) 하위 메뉴를 가진 메뉴
하위 메뉴 Controls.Add(Type:=msoControlButton) 클릭 가능한 버튼
매크로 연결 .OnAction = "프로시저명" 클릭 시 실행
초기화 cmdBar.Reset 원래 메뉴로 복원

자주 묻는 질문 (FAQ)

Q1. 엑셀 메뉴에 사용자 정의 메뉴를 추가하려면 어떻게 하나요?

CommandBars("worksheet menu bar")에 msoControlPopup 컨트롤을 추가하고 그 아래에 버튼을 추가한 뒤 OnAction에 실행할 프로시저를 지정합니다.

Q2. 이미 만든 메뉴가 있을 때 중복 생성을 막으려면?

같은 이름의 컨트롤을 먼저 Delete 한 다음 새로 만듭니다.

Q3. 추가한 메뉴를 원래대로 되돌리려면?

메뉴 표시줄의 Reset 메서드를 실행합니다.

마치며

CommandBars와 OnAction을 이해하면 엑셀 메뉴에 원하는 기능을 직접 추가할 수 있습니다.