Så här skapar du anpassade menyer i ditt Excel-arbetsblad via VBA

Excel-bandet kan modifieras för att passa ett visst jobb. Denna övning skapar nya menyer som pekar användarna på specifika ark som är relevanta för deras uppgift.

I den här artikeln kommer vi att presentera hur du skapar anpassade menyer i ditt Excel-kalkylblad, så här:Skapa anpassade menyer i ditt Excel-arbetsblad

Den här artikeln förutsätter att läsaren har utvecklarbandet och är bekant med VBA Editor. Om inte, vänligen Google "Excel-fliken för utvecklare" eller "Excel-kodfönstret".

Arbetsbok

Arbetsboken som ska användas har ett antal ark. Vi föreslår att du använder exemplet som finns här. Det ser ut så här.Exempel på arbetsbok

De fyra första arken är dysfunktionella och används endast i denna övning för navigationsändamål.

Det femte arket innehåller den anpassade menystrukturen som är speciell för denna arbetsbok. För närvarande ska den vara tom förutom en testknapp.

Lägg till menystrukturen

Kopiera följande textblock till cell A1 på arket "MenuSheet".

Nivå, bildtext, position / makro, avdelare

1, & Användarverktyg, 10

2, Visa Dashboard, SelectDashboard

2, Lägg till nytt,, SANT

3, klient, SelectClient

3, Plats, SelectLocation

3, Manager, SelectManager

2, Stäng, CloseFile

Formatera menystrukturen

Denna CSV-data hamnar i kolumn A. För att formatera den till enskilda Excel-celler, välj kolumn A och använd "Text till kolumner" i Dataflik. Avgränsaren skulle vara "komma".Formatera den till individuella Excel-celler

Ovanstående, när vi har lagt till lämplig kod, ger oss den nivåbaserade menystrukturen till vänster.Den nivåbaserade menystrukturen

Den första nivån, i den här övningen, placeras godtyckligt som det tionde objektet i menyraden, vilket du kommer att se när arbetsbokens fulla bredd visas.

Skapa och förstöra menyer

Eftersom vi bara vill ha de nya menyerna för den här specifika arbetsboken kommer vi att skapa och förstöra dem när du öppnar och stänger arbetsboken.

Koden nedan är en början. Den aktiveras när arbetsboken öppnas eller stängs. Kopiera den till en modul i din arbetsbok.

Tilldela testknappen på MenuSheet till Auto_Open.

Option Explicit

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

Nedan undersöker vi vår menystruktur närmare.Undersök vår menystruktur närmare

Inget makro utlöses av Lägg till en ny eftersom den inte har någon annan funktion än som förälder till undermenyer.

Denna typ av menystruktur är lätt att underhålla. Lägg bara till nya objekt med sina makron, var medveten om menynivån.

Koden

Lägg till följande VBA-kod i modulen. Detta kommer att undersöka "MenuSheet" och skapa den anpassade menyn.

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

Testa koden med testknappen. Den nyskapade användarmenyn finns på menyposition 10, under tillägg.

Excel-återställning

Excel är ibland instabil och kraschar när den är öppen och skadar källfilen. Om det inte går att återställa filen är det bra att ha ett verktyg att reparera Excel-skador annars kommer allt arbete som inte säkerhetskopierats att gå förlorat.

Författarintroduktion:

Felix Hooker är en dataåterställningsexpert i DataNumen, Inc., som är världsledande inom teknik för återställning av data, inklusive reparera rar och mjukvaruprodukter för SQL-återställning. För mer information besök www.datanumen.com

Kommentarer är stängda.