Autor: Max Kaffl (Nepumuk) --- Aus Excel VBA - Gruppe:
TutorialsSymbolleisten (1) - Button einfügen
Autor: Max Kaffl (Nepumuk) - Erstellt: -- - Letzte Revision: --Gruppenthema: 5 Folgen 1 2 3 4 5 Sie sind in Folge:1
Menüleiste - Symbolleiste - Benutzerdefinierte Leiste
Wie füge ich einen neuen Button in eine Leiste ein.
Als erstes werden wir einen Button mit Symbol und Beschriftung hinter dem letzten Element der Arbeitsblatt - Menüleiste einfügen.
Dazu wird die Leiste, um sie leichter handhaben zu können, der Objektvariablen "myCommandBar" zugewiesen. Der Variablen wird durch die Add - Methode der Controls - Eigenschaft ein neuer Button hinzugefügt. Durch die gleichzeitige Verwendung der Set - Anweisung wird der neue Button der Objektvariablen "myCommandBarButton" zugewiesen. Dem Button - Objekt welches die Variable repräsentiert, werden anschließend, unter Verwendung der With - Anweisung, mehrere Eigenschaften verliehen, auf die noch
eingegangen wird.
Kopieren sie folgenden Code in ein Standardmodul und starten Sie die Prozedur prcCreateButton().
Option Explicit
Option Private Module
Public Sub prcCreateButton()
Dim myCommandBar As CommandBar
Dim myCommandBarButton As CommandBarButton
Set myCommandBar = Application.CommandBars("Worksheet Menu Bar")
Set myCommandBarButton = _
myCommandBar.Controls.Add(Type:=msoControlButton, _
Before:=myCommandBar.Controls.Count + 1, Temporary:=True)
With myCommandBarButton
.BeginGroup = True
.Caption = "Berechnen"
.FaceId = 283
.OnAction = "prcCalculate"
.Style = msoButtonIconAndCaption
.TooltipText = "Berechnung starten"
.Tag = "Berechnen"
End With
Set myCommandBar = Nothing
Set myCommandBarButton = Nothing
End Sub
Public Sub prcCalculate()
MsgBox "Rechnen"
End Sub
Damit haben wir einen neuen Button in der Arbeitsblatt - Menüleiste.
Beim Einfügen gibt es folgende Parameter:
Type:
msoControlButton - ein Button
msoControlEdit - ein Eingabefeld
msoControlDropdown - ein Auswahlfeld
msoControlComboBox - eine Combobox mit Eingabemöglichkeit
msoControlPopup - ein PopUp - Menü
In der Hilfe werden noch einige andere genannt, aber diese sind nicht verfügbar.
ID: Damit kann bestimmt werden, ob der Button eine Standardschaltfläche ist. Wenn wir eine Standardschaltfläche einfügen, darf die OnAction - Eigenschaften des Button nicht gesetzt werden.
Before: Die Position des Steuerelementes in der Leiste. Die Nummerierung beginnt mit 1.
Temporary: Ist der Wert True, wird der Button beim beenden von Excel gelöscht. Ansonsten bleibt er erhalten.
Der Button bekommt folgende Eigenschaften:
BeginGroup: Fügt eine Trennlinie vor dem Button ein.
Caption: Die Beschriftung des Buttons.
FaceId: Das angezeigte Schaltflächensymbol. (Mehr dazu bei: Siehe auch)
OnAction: Das Makro welches durch einen Klick auf den Button ausgelöst wird.
Style:
msoButtonIcon - Nur das Icon anzeigen.
msoButtonCaption - Nur die Beschriftung anzeigen
msoButtonIconAndCaption - Beschriftung und Icon anzeigen in einer Zeile
msoButtonIconAndCaptionBelow - Icon oben und Beschriftung darunter
TooltipText: Ein Kommentarfenster welches beim berühren des Buttons mit der Maus angezeigt wird. Wird kein separater Text angegeben, erscheint die Caption des Buttons als Text.
Tag: Ein frei verfügbares Feld, welches zur Identifizierung des Buttons dient.
Es gibt noch andere Eigenschaften und Methoden, die sie aus der VBA - Hilfe entnehmen können, wenn sie nach
"CommandBar-Objekt" bzw. "CommandBarButton-Objekt" suchen.
Sie werden bemerken, wenn sie das Makro öfters starten, dass jedes mal ein neuer Button hinzugefügt wird.
Keine Angst, da diese Buttons mit der Eigenschaft "Temporär" ausgestattet wurden, werden sie beim beenden
von Excel gelöscht. Um dem grundsätzlich entgegenzuwirken, ergänzen sie das Makro wie folgt:
Option Explicit
Option Private Module
Private Const COMMANDBAR_NAME As String = "Worksheet Menu Bar"
Public Sub prcCreateButton()
Dim myCommandBar As CommandBar
Dim myCommandBarButton As CommandBarButton
Call prcDeleteButton(True)
Set myCommandBar = Application.CommandBars(COMMANDBAR_NAME)
Set myCommandBarButton = _
myCommandBar.Controls.Add(Type:=msoControlButton, _
Before:=myCommandBar.Controls.Count + 1, Temporary:=True)
With myCommandBarButton
.BeginGroup = True
.Caption = "Berechnen"
.FaceId = 283
.OnAction = "prcCalculate"
.Style = msoButtonIconAndCaption
.TooltipText = "Berechnung starten"
.Tag = "Berechnen"
End With
Set myCommandBar = Nothing
Set myCommandBarButton = Nothing
End Sub
Private Sub prcCalculate()
MsgBox "Rechnen"
End Sub
Public Sub prcDeleteButton(Optional ByVal bolDelete As Boolean = False, _
Optional ByVal bolHide As Boolean = True)
Dim myCommandBarButton As CommandBarButton
Set myCommandBarButton = Application.CommandBars(COMMANDBAR_NAME) _
.FindControl(Tag:="Berechnen")
If Not myCommandBarButton Is Nothing Then
With myCommandBarButton
If bolDelete Then .Delete Else .Visible = bolHide
End With
Set myCommandBarButton = Nothing
End If
End Sub
Nun wird der Button, falls schon vorhanden, bevor ein neuer erstellt wird, gelöscht. Sie sehen auch den Einsatz der Tag - Eigenschaft beim Suchen (FindControl - Methode) des Buttons in der Symbolleiste.
Sie werden feststellen, dass, wenn sie eine zweite Mappe öffnen, der Button immer noch angezeigt wird, obwohl er in der anderen Mappe nicht benötigt wird. Außerdem soll das erzeugen des Buttons und das löschen des selben automatisch erfolgen. Da das öffnen und schließen sowie aktivieren und deaktivieren Ereignisse der Mappe sind, benötigen wir vier Routinen im Klassenmodul "DieseArbeitsmappe".
' **************************************************************
' Modul: DieseArbeitsmappe Typ = Element der Mappe(Sheet, Workbook, ...)
' **************************************************************
Option Explicit
Private Sub Workbook_Activate()
Call prcDeleteButton
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Call prcDeleteButton(True)
End Sub
Private Sub Workbook_Deactivate()
Call prcDeleteButton(, False)
End Sub
Private Sub Workbook_Open()
Call prcCreateButton
End Sub
Beim Open - Ereignis wird der Button erstellt.
Beim Close - Ereignis wird der Button gelöscht.
Beim Deactivate - Ereignis wird der Button ausgeblendet.
Beim Activate - Ereignis wird der Button eingeblendet.
Damit sind alle Möglichkeiten abgedeckt und sie haben Teil 1 der Symbolleistentrilogie überstanden.
Weitere Artikel der Gruppe: Tutorials Aus Excel VBA
Nach oben