Siehe auch: | FaceId von Schaltflächen | 

Autor: Max Kaffl (Nepumuk)  --- Aus Excel VBA - Gruppe: Tutorials

Symbolleisten (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