2
www.ChF-Online.de  

Gruppenschaltflächen (RadioButtons) in Symbolleisten

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
 Feld-Arbeiten
 Form-Sachen
aktiv aktiv Menü-/Symbolleisten
 Dynamische Symbole
 Symbolleisten ausblenden
 Menümakros identifizieren
 Menüleisten (I)
 Menüleisten (II)
 Menü-/Symbolleisten-Schutz
aktiv  Gruppenschaltflächen
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
 Fix-und-Fertiges/Projekte
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
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.


 Besucher: 0 online  |  0 heute  |  0 diesen Monat  |  2227147 insgesamt | Seitenaufrufe: 25   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  Warum folgt man der Mehrheit? Etwa weil sie mehr Vernunft besitzt? Nein - weil sie stärker ist.
Blaise Pascal
 powered by phpCMS and PAX