Tipps & Tricks - Office Symbolleiste anzapfen
Ausgabe 03/2001
Office bietet eine große Anzahl an unterschiedlichen Icons für die Symbolleiste. Standardmäßig hat man allerdings nur auf eine relativ kleine Anzahl von Symbolen Zugriff. Mit einer kleinen Funktion kann man diese Quelle jedoch anzapfen. Ein einzelnes Objekt einer CommandBar, das CommandBarControl-Objekt, hat eine Eigenschaft mit Namen FaceID. In ihr können Sie einen Zahl zwischen 0 und 3518 einsetzen, die wiederum ein bestimmtes Symbol repräsentiert, welches dann angezeigt wird.
Wenn Sie den im Listing 1 angegebene Code ausführen, wird zunächst einmal eine eventuell zuvor erstellte Symbolleiste gelöscht. Anschließend wird die Unter- bzw. Obergrenze abgefragt, da bei einer Auflösung von 800x600 Pixel schon 500 Symbole den ganzen Bildschirm ausfüllen, ganz zu schweigen von 3519. Nach einer Plausibilitätsprüfung (Obergrenze > Untergrenze) wird eine neue Symbolleiste erstellt und die Schaltflächen (msoControlButton) mittels einer Schleife hinzugefügt. Dabei ist es ganz wichtig die FaceID-Eigenschaft mit dem Schleifenindex zu belegen.
Wenn die Symbolleiste angezeigt wird, kann man in deren Kontextmenü den Befehl Anpassen.... auswählen und befindet sich somit im Entwurfsmodus. Im Kontextmenü einer einzelnen Schaltfläche kann man jetzt den Befehl zur Kopie in die Zwischenablage sehen und das Symbol so gewissermaßen exportieren.
Abbildung 1: kleine Auswahl an Office-Symbolen
Listing 1: Benutzerdefinierte Symbolleiste erstellen
Public Function Create_CmdBar_Symbol()
On Error GoTo RunError
Dim ibx_txt As String '* Text für InputBox
Dim lop As Long '* Schleifenzähler
Dim IDFrom As Variant '* ID-Obergrenze
Dim IDUntil As Variant '* ID-Untergrenze
Dim ocb As CommandBar
Dim cbc As CommandBarControl
'* Evetuell existierende Symbolleiste löschen
CommandBars("sym_Symbols").Delete
'* Inputboxtext für Untergrenze generieren
ibx_txt = ""
ibx_txt = ibx_txt & "Access 97 unterstützt nur Symbol-ID´s" & Chr$(13)
ibx_txt = ibx_txt & "von 0 bis 3518." & Chr$(13)
ibx_txt = ibx_txt & "Im Normalfall sollten maximal 1000 Symbole" & Chr$(13)
ibx_txt = ibx_txt & "gleichzeitig angezeigt werden!" & Chr$(13) & Chr$(13)
ibx_txt = ibx_txt & "Bitte geben Sie jetzt die ID-Untergrenze an..."
'* Unteregrenze abfragen
IDFrom = InputBox(ibx_txt, "Symbol-Untergrenze", "0")
'* wenn keine Eingabe oder Abbruch-Button, dann Abbruch!
If IDFrom = "" Then Exit Function
'* Inputboxtext für Obergrenze generieren
ibx_txt = ""
ibx_txt = ibx_txt & "Jetzt müssen noch ID-Obergrenze angeben ..."
'* Obergrenze abfragen
IDUntil = InputBox(ibx_txt, "Symbol-Obergrenze", "500")
'* wenn keine Eingabe oder Abbruch-Button, dann Abbruch!
If IDUntil = "" Then Exit Function
'* Obergrenze muss größer Untergrenze sein, sonst Abbruch!
If CLng(IDUntil) < CLng(IDFrom) Then Exit Function
'* Symbolleiste neu erstellen
Set ocb = CommandBars.Add("sym_Symbols", msoBarFloating, False, True)
For lop = CLng(IDFrom) To CLng(IDUntil)
'* neue Symbolschaltfläche in die Leiste einfügen
Set cbc = ocb.Controls.Add(msoControlButton)
'* Symbol-Eigenschaft setzen
cbc.FaceID = lop
'* die Symbol-ID soll in der Quickinfo sichtbar sein
cbc.ToolTipText = "Nr:" & lop
Next lop
'* Breite der Symbolleise einstellen!
'* Bei dieser Breite sind immer 30 Symbole in einer Reihe.
ocb.Width = 725
'* Position festelegen (links oben)
ocb.Left = 25
ocb.Top = 100
'* Symbolleiste sichtbar machen
ocb.Visible = True
RunError:
Select Case Err.Number
Case 0 '* kein Fehler aufgetreten
Case 5 '* Symbolleiste existiert nicht
Resume Next
Case Else
MsgBox Err.Description, vbCritical, "No. " & Err.Number
End Select
End Function