Aangepaste menu's maken in uw Excel-werkblad via VBA

Het Excel-lint kan worden aangepast aan een bepaalde taak. Deze oefening creëert nieuwe menu's die gebruikers naar specifieke bladen verwijzen die relevant zijn voor hun taak.

In dit artikel laten we zien hoe u aangepaste menu's kunt maken in uw Excel-werkblad, zoals dit:Maak aangepaste menu's in uw Excel-werkblad

In dit artikel wordt ervan uitgegaan dat de lezer het ontwikkelaarslint heeft weergegeven en bekend is met de VBA-editor. Als dit niet het geval is, gebruik dan Google "Excel Developer Tab" of "Excel Code Window".

werkboek

Het te gebruiken werkboek heeft een aantal bladen. We raden u aan het voorbeeld hier te gebruiken. Het ziet er zo uit.Het voorbeeldwerkboek

De eerste vier bladen zijn disfunctioneel en worden in deze oefening alleen voor navigatiedoeleinden gebruikt.

Het vijfde blad bevat de aangepaste menustructuur die specifiek is voor deze werkmap. Momenteel zou het leeg moeten zijn, behalve een testknop.

Voeg de menustructuur toe

Kopieer het volgende tekstblok naar cel A1 van het blad “MenuSheet”.

Niveau, bijschrift, positie / macro, scheidingslijn

1, & Gebruikersinstellingen, 10

2, Dashboard weergeven, Dashboard selecteren

2, Nieuwe toevoegen, TRUE

3, Client, SelectClient

3, Locatie, Selecteer Locatie

3, Manager, SelectManager

2, Sluiten, CloseFile

Formatteer de menustructuur

Deze CSV-gegevens komen terecht in kolom A. Om het in afzonderlijke Excel-cellen op te maken, selecteert u kolom A en gebruikt u 'Tekst naar kolommen' in de Gegevens tab. Het scheidingsteken zou "komma" zijn.Formatteer het in afzonderlijke Excel-cellen

Het bovenstaande geeft ons, zodra we de juiste code hebben toegevoegd, de op niveaus gebaseerde menustructuur aan de linkerkant.De op niveaus gebaseerde menustructuur

Het eerste niveau in deze oefening is arbitragerarily geplaatst als het tiende item op de menubalk, zoals u zult zien wanneer de volledige breedte van de werkmap wordt weergegeven.

Menu's maken en vernietigen

Omdat we alleen de nieuwe menu's voor deze specifieke werkmap willen, zullen we ze maken en vernietigen bij het openen en sluiten van de werkmap.

De onderstaande code is alstart. Het wordt geactiveerd wanneer de werkmap wordt geopend of gesloten. Kopieer het naar een module in uw werkmap

Wijs de knop Test op MenuSheet toe aan Auto_Open.

Option Explicit

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

Hieronder bekijken we onze menustructuur nader.Bekijk onze menustructuur nader

Geen macro wordt geactiveerd door Voeg een nieuwe omdat het geen andere functie heeft dan als ouder van submenu's.

Dit soort menustructuur is gemakkelijk te onderhouden. Voeg eenvoudig nieuwe items toe met hun macro's, waarbij u zich bewust bent van het menuniveau.

De code

Voeg de volgende VBA-code toe aan de module. Dit zal het “MenuSheet” onderzoeken en het aangepaste menu creëren.

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 de code met de Test-knop. Het nieuw aangemaakte gebruikersmenu is te vinden op menupositie 10, onder Add-ins.

Excel-herstel

Excel is soms onstabiel en crasht tijdens het openen, waardoor het bronbestand beschadigd raakt. Als het bestand niet kan worden hersteld, is het handig om een ​​tool te hebben om te repareren Excel-schade anders zal al het niet-gebackupte werk lost.

Auteur Introductie:

Felix Hooker is een expert op het gebied van gegevensherstel DataNumen, Inc., de wereldleider in technologieën voor gegevensherstel, waaronder reparatie rar en sql-herstelsoftwareproducten. Voor meer informatie bezoek www.datanumen.com

Reacties zijn gesloten.