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:
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.
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.
Het bovenstaande geeft ons, zodra we de juiste code hebben toegevoegd, de op niveaus gebaseerde menustructuur aan de linkerkant.
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.
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



