Hvordan lage tilpassede menyer i Excel-regnearket via VBA

Excel-båndet kan endres for å passe til en bestemt jobb. Denne øvelsen lager nye menyer som peker brukere til spesifikke ark som er relevante for oppgaven deres.

I denne artikkelen vil vi introdusere hvordan du lager tilpassede menyer i Excel-regnearket ditt, slik:Lag tilpassede menyer i Excel-regnearket

Denne artikkelen forutsetter at leseren har utviklerbåndet vist og er kjent med VBA Editor. Hvis ikke, vennligst Google "Excel Developer Tab" eller "Excel Code Window".

Arbeidsbok

Arbeidsboken som skal brukes har en rekke ark. Vi foreslår at du bruker prøven du finner her. Det ser slik ut.Eksempel på arbeidsbok

De fire første arkene er dysfunksjonelle, og brukes i denne øvelsen kun for navigasjonsformål.

Det femte arket vil inneholde den tilpassede menystrukturen som er spesielt for denne arbeidsboken. For øyeblikket skal den være tom bortsett fra en testknapp.

Legg til menystrukturen

Kopier følgende tekstblokk inn i celle A1 på arket "Menyark".

Nivå, bildetekst, posisjon/makro, skillelinje

1,&Brukerverktøy,10

2,Vis Dashboard,Velg Dashboard

2,Legg til ny, ,TRUE

3,klient,velg klient

3,Plassering,VelgPlassering

3,Manager,SelectManager

2, Lukk, Lukk fil

Formater menystrukturen

Disse CSV-dataene havner i kolonne A. For å formatere dem til individuelle Excel-celler, velg kolonne A og bruk "Tekst til kolonner" i Datafanen. Avgrensningstegnet vil være "komma".Formater den til individuelle Excel-celler

Ovennevnte, når vi har lagt til den riktige koden, vil gi oss den nivåbaserte menystrukturen til venstre.Den nivåbaserte menystrukturen

Det første nivået, i denne øvelsen, er vilkårlig plassert som det tiende elementet på menylinjen, slik du vil se når arbeidsbokens fulle bredde vises.

Opprette og ødelegge menyer

Siden vi bare vil ha de nye menyene for denne spesifikke arbeidsboken, vil vi opprette og ødelegge dem ved åpning og lukking av arbeidsboken.

Koden nedenfor er en start. Den vil bli utløst når arbeidsboken åpnes eller lukkes. Kopier den til en modul i arbeidsboken din.

Tilordne Test-knappen på menyark til Auto_Open.

Option Explicit

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

Nedenfor ser vi nærmere på vår menystruktur.Undersøk menystrukturen vår nærmere

Ingen makro utløses av Legg til ny fordi den ikke har noen annen funksjon enn som overordnet undermenyer.

Denne typen menystruktur er enkel å vedlikeholde. Bare legg til nye elementer med makroene deres, og vær bevisst på menynivået.

Koden

Legg til følgende VBA-kode til modulen. Dette vil undersøke "Menyarket" og lage den tilpassede menyen.

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

Test koden med Test-knappen. Den nyopprettede brukermenyen finner du på menyposisjon 10, under Tillegg.

Excel-gjenoppretting

Excel er til tider ustabil og krasjer mens den er åpen, og skader kildefilen. Der den ikke klarer å gjenopprette filen, er det nyttig å ha et verktøy for å reparere Excel skade ellers vil alt arbeid som ikke er sikkerhetskopiert gå tapt.

Forfatterintroduksjon:

Felix Hooker er en datagjenopprettingsekspert innen DataNumen, Inc., som er verdensledende innen datagjenopprettingsteknologier, inkludert reparer rar og sql-programvareprodukter. For mer informasjon besøk www.datanumen. Med

Kommentarer er stengt.