RSS

Lav din egen værktøjslinie i Excel med VBA makroer

Det er nemt at lave sin egen værktøjslinie i Excel med nogle makroer skrevet i VBA. Man bestemmer selv udseendet (f.eks. hvilke ikoner der skal bruges som knapper), og man tildeler hver knap på værktøjslinien en makro eller en indbygget funktion i Excel.

Toolbar

Ikonerne vælger man blandt de mange FaceIds, som er til rådighed i Microsoft Office. På denne side findes en oversigt over dem alle med tilhørende numre.

Du kan teste eksemplet på denne side ved først at oprette et VBA-modul i Excels VBA-editor (tryk ALT+F11 for at åbne editoren og indsæt dernæst et VBA-modul). Markér koden på denne side, kopiér (CTRL+C) og indsæt den i modulet. Kør makroen "CreateMyTool".

Hvis du læser dette på en lille skærm, kan nogle af kodelinjerne se "knækkede" ud, men linjeskiftene er okay, når du kopierer ind i et VBA-modul.

Det kan laves, så værktøjslinien kun er aktiv i det pågældende regneark. I så fald skal du indsætte de sidste 2 makroer (Private Sub Workbook_Activate og Private Sub Workbook_Deactivate) i makroarket til ThisWorkbook. Så laves og slettes værktøjslinien, når du hhv. aktiverer og deaktiverer regnearket.


Option Explicit

Sub CreateMyTool()
'Laver en værktøjslinie med navnet "cbMyTool"

Dim cbMyTool As CommandBar
Dim cbbMyButton As CommandBarButton

'Lav værktøjslinien
Set cbMyTool = CommandBars.Add

'Nu tilføjes en knap. FaceId er knappens ikon,
'OnAction er den makro, der skal køres, og
'ToolTipText er den tekst, der vises, når
'musen holdes over knappen.
Set cbbMyButton = cbMyTool.Controls.Add(msoControlButton)
With cbbMyButton
   .OnAction = "DummyMacro1"
   .FaceId = 645
   .TooltipText = "Tryl med tal"
End With

'Endnu en knap tilføjes
Set cbbMyButton = cbMyTool.Controls.Add(msoControlButton)
With cbbMyButton
   .OnAction = "DummyMacro2"
   .FaceId = 940
   .TooltipText = "Vis en besked"
End With

'Endnu en knap tilføjes
Set cbbMyButton = cbMyTool.Controls.Add(msoControlButton)
With cbbMyButton
   .OnAction = "DummyMacro3"
   .FaceId = 385
   .TooltipText = "Funktioner"
End With

'Endnu en knap tilføjes
Set cbbMyButton = cbMyTool.Controls.Add(msoControlButton)
With cbbMyButton
   .OnAction = "DummyMacro1"
   .FaceId = 1662
   .TooltipText = "Betingelser"
End With

'Endnu en knap tilføjes
Set cbbMyButton = cbMyTool.Controls.Add(msoControlButton)
With cbbMyButton
   .OnAction = "DummyMacro2"
   .FaceId = 225
   .TooltipText = "Lås celler"
End With

'Endnu en knap tilføjes
Set cbbMyButton = cbMyTool.Controls.Add(msoControlButton)
With cbbMyButton
   .OnAction = "DummyMacro3"
   .FaceId = 154
   .TooltipText = "Nulstil alt"
End With

'Endnu en knap tilføjes
Set cbbMyButton = cbMyTool.Controls.Add(msoControlButton)
With cbbMyButton
   .OnAction = "DummyMacro1"
   .FaceId = 155
   .TooltipText = "Tilbage"
End With

'Før vi slutter, får værktøjslinien navn
'og bredde og placeres på skærmen.

With cbMyTool
   .Name = "Genveje"
   .Left = Application.ActiveWindow.Width
   .Top = Application.ActiveWindow.Height
   .Visible = True
   .Width = 300
End With

BeforeExit:
Set cbMyTool = Nothing
Set cbbMyButton = Nothing

Exit Sub
ErrorHandle:
MsgBox Err.Description & " CreateMyTool", _
vbOKOnly + vbCritical, "Fejl"
Resume BeforeExit
End Sub

Sub DeleteMyTool()

'Fjerner værktøjslinien "Genveje".
'Hvis den ikke eksisterer, får vi
'en fejl, og derfor bruger vi
'On Error Resume Next.

On Error Resume Next

CommandBars("Genveje").Delete

On Error GoTo 0

End Sub

Sub RemoveToolBar()

'Fjerner alle ikke-indbyggede menu-
'og værktøjslinier og genskaber
'Excels standardmenu.
'Et alternativ til DeleteMyTool,
'som kun fjerner den navngivne
'værktøjslinie "Genveje".

Dim cbBar As CommandBar

On Error GoTo ErrorHandle

For Each cbBar In Application.CommandBars
    If Not cbBar.BuiltIn Then cbBar.Delete
Next

Exit Sub
ErrorHandle:
MsgBox Err.Description & " RemoveMenu", vbOKOnly, "Fejl"
End Sub

'Her følger de makroer, som køres ved
'tryk på værktøjsliniens knapper.

Sub DummyMacro1()
    MsgBox "Skriv din egen makro i stedet for denne besked.", _
    vbOKOnly, "Hej-hej"
End Sub

Sub DummyMacro2()
    MsgBox "Skriv noget kode i VBA.", _
    vbOKOnly, "Hallo De dér!"
End Sub

Sub DummyMacro3()
    MsgBox "Og med min pil og bue jeg skød en albatros.", _
    vbOKOnly, "Anders And"
End Sub

De følgende 2 makroer skal indæ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()
CreateMyTool
End Sub

Private Sub Workbook_Deactivate()
DeleteMyTool
End Sub

Som sagt er der tusindvis af de små ikoner (FaceId). På denne side er en oversigt over dem alle med tilhørende numre.

Relaterede sider: