Aktuelle Seite:
/vba/vbaradiobuttons.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXP  
Makro/Datei speichern
Print

Mittels VBA lassen sich Symbolleisten beliebig erstellen und und auf diese Symbole, die entweder eine feste eingebaute oder eine frei konfigurierbare Funktion besitzen, anordnen. Das Aussehen und Verhalten wird dabei auch durch den Steuerelementtypen, die VBA zur Verfügung, mitbestimmt.
Allerdings stehen für Symbolleisten nur wenige Steuerelementtypen (CommandBarControls) zur Verfügung:

  • msoControlButton (Schaltfläche)
  • msoControlEdit (Eingabefeld)
  • msoControlDropdown (vorgegebene Auswahlliste)
  • msoControlComboBox (Auswahlliste)
  • msoControlPopup (Menü)

Leider gibt es keinen Typen, der sich wie ein RadioButton (Gruppen-Auswahlschaltfläche) verhält:
Bei diesem Typen wird zwischen mehrere Schaltflächen innerhalb einer Gruppe gewechselt; es ist also immer nur eine Schaltfläche gedrückt/markiert.

Mit Hilfe einer undokumentierten(?) Eigenschaft der CommandBarControls lässt sich dieser Typ aber mit einfachen Mitteln nachbauen.

Beispiel

Dieses kleine Beispiel sollen zeigen, wie sich mehrere Schaltflächen (msoControlButton) einer Symbolleiste wie Gruppenschaltflächen einrichten und steuern lassen.

Neben der Auswahl der "korrekten" Schaltflächensymbole (siehe  Word-interne Symbole) müssen nur die richtigen Schaltflächen korrekt erkannt und dann mittels der State-Eigenschaft dargestellt werden.

Die State-Eigenschaft stellt dabei die Schaltfläche über den Wert 0 im normalen nichtgedrückten und über den Wert -1 im gedrückten Zustand dar.

Zur Suche und Identifizierung der Gruppenschaltflächen wird über die FindControl-Methode der Symbolleiste auf die Tag-Eigenschaft zurückgegriffen. Über diese Eigenschaft lassen sich recht einfach Symbole auffinden. In diesem Beispiel besitzen alle zur Gruppe gehörenden Schaltflächen einen ähnlichen Tag-Wert (BT1 bis BT3).
Sobald auf eine Schaltfläche geklickt wird, wird im zugewiesenen Makro (über die OnAction-Eigenschaft zugewiesen) der jeweiligen Schaltfläche ein anderes Symbol zugewiesen (per FaceID), die State-Eigenschaft auf -1 geändert und die restlichen Schaltflächen in den normalen deaktivierten Zustand (0)gesetzt.
Anschließend erfolgt die Verarbeitung der eigentlich auszuführenden Routine, die z.B. über einen Funktionsaufruf eingebunden werden kann (in diesem Beispiel wird nur eine Messagebox angezeigt).

Sub BT1()  
Dim myctl As CommandBarControl  
Dim ctl As CommandBarControl  
Dim ctl2 As CommandBarControl  
Set cbar = CommandBars("Test")  
Set myctl = cbar.FindControl(Tag:="BT1")  
Set ctl = cbar.FindControl(Tag:="BT2")  
Set ctl2 = cbar.FindControl(Tag:="BT3")  
If myctl.State = 0 Then  
  myctl.State = -1  
  myctl.FaceId = 1852  
  ctl.State = 0 
  ctl2.State = 0 
  ctl.FaceId = 1202  
  ctl2.FaceId = 1202  
End If  
' Hier Makrobefehle einfügen  
MsgBox "Makro 1"  
End Sub  

Mit der folgenden Prozedur werden alle für obiges Beispiel benötigten Symbolleisten und Symbole erstellt.
Die kommentierten weiteren FaceIDs stellen interessante Alternativen für die Symbole dar.


 www.chf-online.de/vba/vbaradiobuttons.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)