Gruppenschaltflächen (RadioButtons) in Symbolleisten |
|
|||||||||||||||||||||
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.
Leider gibt es keinen Typen, der sich wie ein RadioButton (Gruppen-Auswahlschaltfläche) verhält: Mit Hilfe einer undokumentierten(?) Eigenschaft der CommandBarControls lässt sich dieser Typ aber mit einfachen Mitteln nachbauen. 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). 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. Dim cbar As CommandBar ' Sub MakeButtons() Dim ctl As CommandBarControl Dim i As Integer On Error Resume Next Set cbar = CommandBars("Test") If cbar Is Nothing Then Set cbar = CommandBars.Add("Test") cbar.Visible = True For i = 1 To 3 Set ctl = cbar.FindControl(Tag:="BT" & i) If ctl Is Nothing Then Set ctl = cbar.Controls.Add(msoControlButton, , i) End If With ctl .DescriptionText = "BT" & i .FaceId = 1202 ' 1852 ' 1028 ' 512 513 .OnAction = "BT" & i .Tag = "BT" & i .State = 0 End With Next i On Error GoTo 0 End Sub |
www.chf-online.de/vba/vbaradiobuttons.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |