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:
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.
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".
Ovenstående giver os den niveaubaserede menustruktur til venstre, når vi har tilføjet den relevante kode.
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.
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



