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:
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.
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".
Ovennevnte, når vi har lagt til den riktige koden, vil gi oss den nivåbaserte menystrukturen til venstre.
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.
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



