Sådan oprettes tilpassede menuer i dit Excel-regneark via VBA

Excel-båndet kan ændres, så det passer til et bestemt job. Denne øvelse opretter nye menuer, der henviser brugere til specifikke ark, der er relevante for deres opgave.

I denne artikel vil vi introducere, hvordan du opretter tilpassede menuer i dit Excel-regneark, som dette:Opret tilpassede menuer i dit Excel-regneark

Denne artikel antager, at læseren har udviklerbåndet vist og er fortrolig med VBA Editor. Hvis ikke, bedes du Google “fanen Excel-udvikler” eller “vinduet Excel-kode”.

Workbook

Den projektmappe, der skal bruges, har et antal ark. Vi foreslår, at du bruger den prøve, der findes her. Det ser sådan ud.Eksempel på projektmappe

De første fire ark er dysfunktionelle og bruges kun i denne øvelse til navigationsformål.

Det femte ark indeholder den tilpassede menustruktur, der er speciel for denne projektmappe. På nuværende tidspunkt skal det være tomt undtagen en testknap.

Tilføj menustrukturen

Kopier den følgende tekstblok til celle A1 på arket "MenuSheet".

Niveau, billedtekst, position / makro, skillevæg

1, & Brugerfunktioner, 10

2, Vis dashboard, SelectDashboard

2, Tilføj nyt,, SAND

3, klient, SelectClient

3, Location, SelectLocation

3, Manager, SelectManager

2, Luk, LukFil

Formater menustrukturen

Disse CSV-data ender i kolonne A. For at formatere dem i individuelle Excel-celler skal du vælge kolonne A og bruge 'Tekst til kolonner' i Fanen Data. Afgrænsningen ville være "komma".Formater det til individuelle Excel-celler

Ovenstående giver os den niveaubaserede menustruktur til venstre, når vi har tilføjet den relevante kode.Den niveaubaserede menustruktur

Det første niveau i denne øvelse er arbitrærrarily placeret som det tiende punkt på menulinjen, som du vil se, når projektmappens fulde bredde vises.

Oprettelse og ødelæggelse af menuer

Da vi kun vil have de nye menuer til denne specifikke projektmappe, opretter og ødelægger vi dem ved åbning og lukning af projektmappen.

Koden nedenfor er somtart. Den udløses, når projektmappen åbnes eller lukkes. Kopier det til et modul i din projektmappe

Tildel testknappen på MenuSheet til Auto_Open.

Option Explicit

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

Nedenfor undersøger vi vores menustruktur nærmere.Undersøg vores menustruktur nærmere

Ingen makro udløses af Tilføj ny fordi den ikke har nogen anden funktion end som forælder til undermenuer.

Denne form for menustruktur er let at vedligeholde. Du skal blot tilføje nye emner med deres makroer, idet du er opmærksom på menuniveauet.

Koden

Tilføj følgende VBA-kode til modulet. Dette vil undersøge "MenuSheet" og oprette den tilpassede 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

Test koden med knappen Test. Den nyoprettede brugermenu findes på menuposition 10 under tilføjelsesprogrammer.

Excel-gendannelse

Excel er til tider ustabil og går ned, mens den er åben, og beskadiger kildefilen. Hvor det ikke gendanner filen, er det nyttigt at have et værktøj til reparation Excel-skader Ellers vil alt ikke-sikkerhedskopieret arbejde være lost.

Forfatter Introduktion:

Felix Hooker er en datagendannelsesekspert i DataNumen, Inc., som er verdens førende inden for datagendannelsesteknologier, herunder reparere rar og SQL-genopretningssoftwareprodukter. For mere information besøg www.datanumen.com

Kommentarer er lukket.