VBA를 통해 Excel 워크 시트에서 사용자 지정 메뉴를 만드는 방법

지금 공유 :

Excel 리본은 특정 작업에 맞게 수정할 수 있습니다. 이 연습에서는 사용자에게 작업과 관련된 특정 시트를 가리키는 새 메뉴를 만듭니다.

이 기사에서는 다음과 같이 Excel 워크 시트에서 사용자 지정 메뉴를 만드는 방법을 소개합니다.Excel 워크 시트에서 사용자 지정 메뉴 만들기

이 문서에서는 독자에게 개발자 리본이 표시되고 VBA 편집기에 익숙하다고 가정합니다. 그렇지 않은 경우 Google "Excel 개발자 탭"또는 "Excel 코드 창"을 사용하십시오.

통합 문서

사용할 통합 문서에는 여러 시트가 있습니다. 여기에있는 샘플을 사용하는 것이 좋습니다. 이렇게 생겼어요.샘플 워크 북

처음 XNUMX 개의 시트는 제대로 작동하지 않으며이 연습에서는 탐색 목적으로 만 사용됩니다.

다섯 번째 시트에는이 통합 문서에 특정한 사용자 지정 메뉴 구조가 들어 있습니다. 현재 테스트 버튼을 제외하고는 비어 있어야합니다.

메뉴 구조 추가

다음 텍스트 블록을 "MenuSheet"시트의 A1 셀에 복사합니다.

레벨, 캡션, 위치 / 매크로, 디바이더

1, 사용자 도구, 10

2, 대시 보드 표시, 대시 보드 선택

2, 새로 추가,, TRUE

3, 클라이언트, SelectClient

3, 위치, 위치 선택

3, 관리자, SelectManager

2, 닫기, 닫기 파일

메뉴 구조 서식 지정

이 CSV 데이터는 A 열에 있습니다. 개별 Excel 셀로 형식을 지정하려면 A 열을 선택하고 '텍스트를 열로' 인간을 데이터 탭. 구분 기호는 "쉼표"입니다.개별 Excel 셀로 서식 지정

위는 적절한 코드를 추가하면 왼쪽에 레벨 기반 메뉴 구조를 제공합니다.레벨 기반 메뉴 구조

이 연습에서 첫 번째 수준은 워크북 전체 너비가 표시될 때 볼 수 있듯이 메뉴 모음의 열 번째 항목으로 임의로 배치되었습니다.

메뉴 생성 및 삭제

이 특정 통합 문서에 대한 새 메뉴 만 필요하므로 통합 문서를 열고 닫을 때 메뉴를 만들고 제거합니다.

아래 코드는 시작용 코드입니다. 이 코드는 통합 문서가 열리거나 닫힐 때 실행됩니다. 이 코드를 복사하여 통합 문서의 모듈에 붙여넣으세요.

MenuSheet의 테스트 단추를 Auto_Open에 지정하십시오.

Option Explicit

Sub auto_Open()
    Call DeleteMenu
    Call CreateMenu
 End Sub
 
Sub auto_Close()
    Call DeleteMenu
End Sub

아래에서 메뉴 구조를 더 자세히 살펴 보겠습니다.메뉴 구조를 더 자세히 살펴보세요

매크로가 트리거되지 않음 새로운 추가 하위 메뉴의 상위 기능 외에 다른 기능이 없기 때문입니다.

이러한 종류의 메뉴 구조는 유지 관리가 쉽습니다. 메뉴 레벨을 인식하고 매크로로 새 항목을 추가하기 만하면됩니다.

코드

다음 VBA 코드를 모듈에 추가하십시오. 이것은“MenuSheet”를 검사하고 사용자 정의 된 메뉴를 만듭니다.

Sub CreateMenu()
'   Called from Auto_Open. 'NOTE: There is no error handling in this subroutine
    Dim MenuSheet As Worksheet
    Dim MenuObject As CommandBarPopup

    Dim MenuItem As Object
    Dim SubMenuItem As CommandBarButton
    Dim sRow As Integer
    Dim MenuLevel, NextLevel, PositionOrMacro, Caption, Divider

    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    Call DeleteMenu

    sRow = 2 '   start row
    
'   Add menus using the structure as per the MenuSheet
    Range("A" & sRow).Select
    Do While ActiveCell > "" '****************
        With MenuSheet
            MenuLevel = .Cells(sRow, 1)
            Caption = .Cells(sRow, 2)
            PositionOrMacro = .Cells(sRow, 3)
            Divider = .Cells(sRow, 4)
            NextLevel = .Cells(sRow + 1, 1)
        End With
        
        Select Case MenuLevel
            Case 1 ' Add the top-level menu to the Worksheet CommandBar
                Set MenuObject = Application.CommandBars(1). _
                    Controls.Add(Type:=msoControlPopup, _
                    Before:=PositionOrMacro, _
                    Temporary:=True)
                MenuObject.Caption = Caption
            Case 2 ' A Menu Item
                If NextLevel = 3 Then
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlPopup)
                Else
                    Set MenuItem = MenuObject.Controls.Add(Type:=msoControlButton)
                    MenuItem.OnAction = PositionOrMacro
                End If
                MenuItem.Caption = Caption
                If Divider Then MenuItem.BeginGroup = True
            Case 3 ' A SubMenu Item
                Set SubMenuItem = MenuItem.Controls.Add(Type:=msoControlButton)
                SubMenuItem.Caption = Caption
                SubMenuItem.OnAction = PositionOrMacro
                
                If Divider Then SubMenuItem.BeginGroup = True
        End Select
        sRow = sRow + 1
        Range("A" & sRow).Select '***************************************
    Loop
    Sheets("Dashboard").Activate
End Sub

Sub DeleteMenu()
'   This sub will be executed when the workbook is closing
    Dim MenuSheet As Worksheet
    Dim sRow As Integer
    Dim Caption As String
    
    On Error Resume Next
    Set MenuSheet = ThisWorkbook.Sheets("MenuSheet")
    sRow = 2
    Range("A" & sRow).Select
    Do While ActiveCell > ""
        If MenuSheet.Cells(sRow, 1) = 1 Then
            Caption = MenuSheet.Cells(sRow, 2)
            Application.CommandBars(1).Controls(Caption).Delete
        End If
        sRow = sRow + 1
        Range("A" & sRow).Select
    Loop
   
    On Error GoTo 0
End Sub

Sub SelectDashboard()
    Sheets("Dashboard").Activate
End Sub
Sub SelectClient()
    Sheets("Client").Activate
End Sub

Sub SelectLocation()
    Sheets("Location").Activate
End Sub

Sub SelectManager()
    Sheets("Manager").Activate
End Sub

Sub CloseFile()
    MsgBox "Close! (write your own code in the module)"
End Sub

테스트 버튼으로 코드를 테스트합니다. 새로 생성 된 사용자 메뉴는 추가 기능 아래의 메뉴 위치 10에 있습니다.

엑셀 복구

Excel은 때때로 불안정하며 열 때 충돌이 발생하여 소스 파일이 손상됩니다. 파일 복구에 실패한 경우 복구 도구가 있으면 유용합니다. Excel 손상 그렇지 않으면 백업되지 않은 모든 작업 내용이 손실됩니다.

저자 소개 :

Felix Hooker는 데이터 복구 전문가입니다. DataNumen, Inc.는 다음과 같은 데이터 복구 기술 분야의 세계적 리더입니다. 수리 rar 및 SQL 복구 소프트웨어 제품. 자세한 내용은 WWW.datanumen.COM

지금 공유 :

댓글이 닫혀있다.