Egne menuer i Excel med VBA
I Excel (og andre Officeprogrammer) er det nemt at lave sine egne skræddersyede menupunkter, som tilføjes Excels standardmenu. Man kan også helt erstatte standardmenuen eller lave sine egne værktøjslinier.
OBS: I Excel 2007 og nyere erstatter man ikke Excels indbyggede menu, og jeg ved ikke, om det kan lade sig gøre. I stedet vises et nyt menupunkt, "AddIns" eller "Tilføjelsesprogrammer," og klikker man på dette, vises den skræddersyede menu.
I eksemplet på denne side tilføjes et nyt menupunkt, "Menukort", med underpunkter til højre for standardmenuens "Hjælp-menu". Menuen er kun synlig, når det pågældende regneark er aktivt. Skifter man til eller åbner et andet regneark, er menupunktet der ikke.
Hvert underpunkt i menuen "Menukort" har tilknyttet en makro (her MinMakro1 og MinMakro2), som i dette eksempel blot er en messagebox. Du kan prøve eksemplet ved at åbne Excels VBA editor (ALT+F11) og indsætte et modul. Markér koden på denne side, kopiér (CTRL+C) og indsæt det kopierede i modulet. Kør makroen "TilfoejMenu".
Hvis du læser dette på en lille skærm, kan nogle af kodelinjerne se "knækkede" ud, men linjeskiftene er OK, når du indsætter den kopierede kode i et VBA-modul.
De to sidste makroer ("Private Sub Workbook_Activate" og "Private Sub Workbook_Deactivate") skal indsættes i makrokoden til "ThisWorkbook". Det er nemt - forklaring følger længere nede på siden.
Option Explicit
Sub TilfoejMenu()
Dim cbHovedMenu As CommandBar
Dim cbcMinMenu As CommandBarControl
Dim cbcUnderMenu As CommandBarControl
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar"). _
Controls("&Menukort").Delete
On Error GoTo ErrorHandle
Set cbHovedMenu = Application.CommandBars _
("Worksheet Menu Bar")
Set cbcMinMenu = cbHovedMenu.Controls.Add _
(Type:=msoControlPopup)
cbcMinMenu.Caption = "&Menukort"
With cbcMinMenu.Controls.Add(Type:=msoControlButton)
.Caption = "Lammekølle"
.OnAction = "MinMakro1"
End With
With cbcMinMenu.Controls.Add(Type:=msoControlButton)
.Caption = "Oksesteg"
.OnAction = "MinMakro2"
End With
Set cbcUnderMenu = cbcMinMenu.Controls.Add _
(Type:=msoControlPopup)
cbcUnderMenu.Caption = "Ne&xt Menu"
With cbcUnderMenu.Controls.Add(Type:=msoControlButton)
.Caption = "&Grillretter"
.FaceId = 2173
.OnAction = "MinMakro2"
End With
With cbcMinMenu.Controls.Add _
(Type:=msoControlButton, Temporary:=True)
.Caption = "Gryderetter"
.OnAction = "MinMakro2"
.BeginGroup = True
.FaceId = 1252
End With
BeforeExit:
Set cbcMinMenu = Nothing
Set cbcUnderMenu = Nothing
Set cbHovedMenu = Nothing
Exit Sub
ErrorHandle:
MsgBox Err.Description & " Fejl i TilfoejMenu"
Resume BeforeExit
End Sub
Sub SletMenu()
On Error Resume Next
Application.CommandBars("Worksheet Menu Bar"). _
Controls("Menukort").Delete
End Sub
Sub MinMakro1()
MsgBox "Ikke meget kød på denne makro", vbInformation, _
"Lammekølle"
End Sub
Sub MinMakro2()
MsgBox "Der er heller ikke meget kød på den her, vel?", _
vbInformation, "Menu"
End Sub
De følgende 2 makroer skal indsættes i makrodelen til "ThisWorkbook". I VBA editoren dobbeltklikker du på ikonet ThisWorkbook, som står lige over moduloversigten i Projektoversigten. Er den ikke synlig, klikker du CTRL+R.
Makroerne sørger for, at din menu er synlig, når regnearket er aktivt, og usynlig, hvis det ikke er aktivt. Hvis du ønsker, at menuen kun skal være aktiv på et bestemt faneblad, skal du vælge det pågældende worksheet i stedet for ThisWorkbook.
Private Sub Workbook_Activate()
TilfoejMenu
End Sub
Private Sub Workbook_Deactivate()
SletMenu
End Sub
De enkelte menupunkter har flere properties (egenskaber) end vist i eksemplet TilfoejMenu. Ud over .OnAction med videre er der f.eks. mulighed for at gøre menupunktet synligt eller usynligt med egenskaben .Visible = True eller .Visible = False.
Det kan f.eks. være styret af en betingelse:
If et-eller-andet Then
.Visible = False
Else
.Visible = True
End If
Så skal man lige huske at køre makroen TilfoejMenu, hvis betingelsen ændrer sig på et tidspunkt, så menupunktet skal være synligt.
Der er tusindvis af de små ikoner (FaceId), som kan stå ud for de enkelte menupunkter. På denne side er en oversigt over dem alle med tilhørende numre.
Relaterede sider:
|