Kontakt-Formular   Inhaltsverzeichnis   Druckansicht  

VisualBasic.tips

Startseite > Microsoft Access VBA > ActiveX Treeview > Tipps & Tricks - Office Symbolleiste anzapfen

Tipps & Tricks - Office Symbolleiste anzapfen

Ausgabe 03/2001

Download Beispieldatei

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

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
Seitenanfang