Jak tworzyć niestandardowe menu w arkuszu programu Excel za pośrednictwem VBA

Podziel się teraz:

Wstążkę programu Excel można modyfikować w celu dostosowania do konkretnego zadania. To ćwiczenie tworzy nowe menu, które kierują użytkowników do określonych arkuszy odpowiednich do ich zadań.

W tym artykule przedstawimy, jak tworzyć niestandardowe menu w arkuszu programu Excel, na przykład:Twórz dostosowane menu w arkuszu programu Excel

W tym artykule założono, że czytelnik ma wyświetloną wstążkę programisty i zna edytor VBA. Jeśli nie, wybierz Google „Excel Developer Tab” lub „Excel Code Window”.

Podręcznik z ćwiczeniami

Skoroszyt, który ma zostać użyty, zawiera kilka arkuszy. Sugerujemy użycie próbki znalezionej tutaj. To wygląda tak.Przykładowy skoroszyt

Pierwsze cztery arkusze są dysfunkcyjne i służą w tym ćwiczeniu wyłącznie do celów nawigacyjnych.

Piąty arkusz będzie zawierał dostosowaną strukturę menu, właściwą dla tego skoroszytu. Obecnie powinno być puste, z wyjątkiem przycisku Test.

Dodaj strukturę menu

Skopiuj następujący blok tekstu do komórki A1 arkusza „MenuSheet”.

Poziom, podpis, pozycja / makro, dzielnik

1 i Narzędzia użytkownika, 10

2, pokaż pulpit nawigacyjny, wybierz pulpit nawigacyjny

2, Dodaj nowe,, PRAWDA

3, Klient, SelectClient

3, lokalizacja, wybierz lokalizację

3, Menedżer, SelectManager

2, zamknij, zamknij plik

Sformatuj strukturę menu

Te dane CSV kończą się w kolumnie A. Aby sformatować je w poszczególnych komórkach programu Excel, wybierz kolumnę A i użyj „Tekst do kolumn” Karta danych. Separatorem byłby „przecinek”.Sformatuj go w osobnych komórkach programu Excel

Powyższe, po dodaniu odpowiedniego kodu, da nam strukturę menu opartą na poziomach po lewej stronie.Struktura menu oparta na poziomach

Pierwszy poziom w tym ćwiczeniu został umieszczony arbitralnie jako dziesiąty element na pasku menu, co zobaczysz, gdy wyświetli się pełna szerokość skoroszytu.

Tworzenie i niszczenie menu

Ponieważ chcemy tylko nowych menu dla tego konkretnego skoroszytu, utworzymy je i zniszczymy podczas otwierania i zamykania skoroszytu.

Poniższy kod to początek. Zostanie on uruchomiony po otwarciu lub zamknięciu skoroszytu. Skopiuj go do modułu w skoroszycie.

Przypisz przycisk Test w MenuSheet do Auto_Open.

Option Explicit

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

Poniżej przyjrzymy się dokładniej strukturze naszego menu.Przyjrzyj się dokładniej naszej strukturze menu

Żadne makro nie jest wyzwalane przez dodaj nowy ponieważ nie pełni żadnej innej funkcji niż jako rodzic podmenu.

Ten rodzaj struktury menu jest łatwy w utrzymaniu. Po prostu dodaj nowe pozycje za pomocą ich makr, mając świadomość poziomu menu.

Kod

Dołącz następujący kod VBA do modułu. Spowoduje to zbadanie „Arkusza menu” i utworzenie dostosowanego menu.

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

Przetestuj kod za pomocą przycisku Testuj. Nowo utworzone menu użytkownika zostanie znalezione na pozycji menu 10, w sekcji Dodatki.

Odzyskiwanie programu Excel

Program Excel jest czasami niestabilny i ulega awarii podczas otwierania, uszkadzając plik źródłowy. W przypadku niepowodzenia odzyskania pliku przydatne jest narzędzie do naprawy Uszkodzenia Excela w przeciwnym wypadku cała nieutworzona kopia zapasowa zostanie utracona.

Wprowadzenie autora:

Felix Hooker jest ekspertem w dziedzinie odzyskiwania danych w DataNumen, Inc., która jest światowym liderem w technologiach odzyskiwania danych, w tym napraw rar i oprogramowanie do odzyskiwania sql. po więcej informacji odwiedź www.datanumen.com

Podziel się teraz:

Możliwość dodawania komentarzy nie jest dostępna.