 |
Symbole in Symbolleisten mit VBA ein- und ausschalten
Symbole in Symbolleisten verΣndern ihre Farbe in grau und funktionieren dann auch nicht mehr, wenn ihre Ausfⁿhrung zum gegenwΣrtigen Zeitpunkt keinen Sinn ergibt. So sind zum Beispiel die Symbole fⁿr ╗Ausschneiden½ und ╗Kopieren½ grau und ohne Funktion, wenn das Dokument keine Markierung enthΣlt. Wie erreiche ich diesen Effekt fⁿr eigene Symbolleisten, die ich in meinen selbstprogrammierten VBA-Anwendungen nutze?
Auf Ihre allgemeine Frage nach der Steuerung des beschriebenen Effekts in VBA-Programmen m÷chten wir die L÷sung an einer Access-97-Anwendung beschreiben und demonstrieren, die Sie auf der Heft-CD finden. CHIP-Code SYMBOL. Bei anderen VBA-Programmen funktioniert es ganz genauso wie bei diesem.
Microsoft bezeichnet sowohl Menⁿ- als auch Symbolleisten allgemein als Befehlsleisten, mit deren Hilfe der Anwender seine Anwendung steuern kann. Wenn Sie mit Befehlsleisten programmieren m÷chten, mⁿssen Sie allerdings zuerst einen Verweis auf die ╗Microsoft Office Object Library½ erzeugen.
Dazu ÷ffnen Sie in Access 97 ein Modul in der Entwurfsansicht, wΣhlen im Kontext-Menⁿ den Befehl ╗Extras | Verweise½ und aktivieren das KontrollkΣstchen neben dem Eintrag ╗Microsoft Office 8.0 Object Library½.
Ein Bestandteil dieser Bibliothek ist das Objekt ╗CommandBar½, das wiederum die Auflistung ╗Controls½ enthΣlt. Mit Hilfe dieser Objekte und deren Eigenschaften kann die VBA-Funktion ╗SwitchCtl()½ zwischen dem aktiven und deaktiven Zustand einzelner Symbole einer Symbolleiste wechseln.
Der ╗Set½-Befehl erzeugt mit dem an die Funktion ⁿbergebenen Namen der Symbolleiste das ben÷tigte Objekt ╗CommandBar½. ▄ber die ╗Controls½-Auflistung kann die Funktion nun in einer ╗For Each½-Schleife auf die einzelnen Symbole - Objekte des Typs ╗Office.CommandBarControl½ - dieser Symbolleiste zugreifen.
Hierbei vergleicht die Funktion die ebenfalls ⁿbergebene ID des gesuchten Symbols mit den IDs der in der Auflistung enthaltenen Objekte. Sollten die IDs identisch sein, setzt die Funktion die Eigenschaft ╗Enabled½ des Objekts: Beim Wert ╗True½ ist das Symbol aktiviert; bei ╗False½ wird das Symbol grau und lΣ▀t sich nicht mehr ausfⁿhren.
Auf die ╗CommandBarControl½-Objekte k÷nnen Sie auch ⁿber einen Index zugreifen, doch im Gegensatz zur ID verΣndert sich der Index des Symbols, falls ein Anwender die Reihenfolge der Symbole Σndert. Ein Vergleich ist sicherer. Dabei hilft die VBA-Prozedur ╗ListCtlId½.
Listing 1: Funktion SwitchCtl ()
Public Function SwitchCtl (Symbolleiste As String, CtlId As Long) As Boolean
Dim cbr As Office.CommandBar
Dim cbrCtl As Office.CommandBarControl
' StandardRⁿckgabe ist FALSE
SwitchCtl = False
' Richtige Symbolleiste ansprechen
Set cbr = Application.CommandBars (Symbolleiste)
For Each cbrCtl In cbr.Controls
If cbrCtl.Id = CtlId Then
If cbrCtl.Enabled = True Then
cbrCtl.Enabled = False
SwitchCtl = True
Else
cbrCtl.Enabled = True
SwitchCtl = True
End If
End If
Next cbrCtl
End Function
Listing 2: Funktion ListCtlId
Public Sub ListCtlId (Symbolleiste As String)
Dim cbr As Office.CommandBar
Dim cbrCtl As Office.CommandBarControl
' Richtige Symbolleiste ansprechen
Set cbr = Application.CommandBars (Symbolleiste)
For Each cbrCtl In cbr.Controls
MsgBox cbrCtl.Id
Next cbrCtl
End Sub
|
 |