![]() |
||
![]() |
Symbole in Symbolleisten mit VBA ein- und ausschaltenSymbole 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 |
![]() |