Tipp 0360 Symbolleiste - eigene Grafiken integrieren
Autor/Einsender:
Datum:
  Angie
29.01.2006 (Update)
Entwicklungsumgebung:   Word 2000
Möchte man einer Symbolleisten-Schaltfläche (CommandBarButton) zur Laufzeit eine eigene Grafik zuweisen, dann könnte man die entsprechende Grafik-Datei per VBA zunächst als Shape-Objekt (bewegliches Objekt!) in ein Word-Dokument einfügen, in die Zwischenablage kopieren und anschließend mit der PasteFace-Methode auf die Schaltfläche kopieren. Diese Vorgehensweise hat unter anderem den Nachteil, dass eine oder vielleicht sogar mehrere Grafik-Dateien "mitgeliefert" werden müssten.
Die meines Erachtens elegantere Methode in Word ist, zur Entwurfszeit eine Dummy-Symbolleiste mit den entsprechenden Symbolen zu erstellen, die für den Anwender per VBA unsichtbar gemacht wird, also deaktiviert wird.
 
Application.CommandBars("NameDummySymbolleiste").Enabled = False
 
Die Schaltflächen der Dummy-Symbolleiste können entweder manuell oder per VBA zur Symbolleiste hinzugefügt werden. Per VBA hätte den Vorteil, dass man für die hinzugefügten Schaltflächen z. B. in der Caption- und/oder Tag-Eigenschaft jeweils eine eindeutige Identifizierung festlegen könnte, um den späteren Zugriff bei der Erstellung der neuen Symbolleiste zu erleichtern.
 
With Application.CommandBars("NameDummySymbolleiste").Controls.Add
  .Caption = "picSmily"
  .Tag = "picSmily"
End With
 
Auch die Schaltflächensymbole können manuell oder per VBA auf die Symbolleisten-Schaltfläche kopiert werden.
Manuell
1.   Die Grafik (das GIF-Format eignet sich am besten) entweder direkt aus dem Grafik-Programm heraus in die Zwischenablage kopieren oder als Shape-Objekt (bewegliches Objekt!) zunächst in ein Dokument einfügen und kopieren.
2.   Die Symbolleiste mit der zu ändernden Schaltfläche einblenden.
3.   Menü Extras / Anpassen... (Da das Dialogfeld Anpassen während der Bearbeitung geöffnet sein muss, muss es gegebenenfalls verschoben werden.)
4.   Rechte Maustaste auf die zu ändernde Symbolleisten-Schaltfläche und im Kontextmenü auf die Option 'Schaltflächensymbol einfügen' klicken. (Über das Kontextmenü 'Schaltflächensymbol ändern' kann die Grafik ggf. noch nachbearbeitet werden.)
Per VBA
 
Dim objShape As Shape

Set objShape = ActiveDocument.Shapes.AddPicture( _
      FileName:="PfadUndDateiNameDerGrafik")

objShape.Select
Selection.CopyAsPicture
objShape.Delete
Set objShape = Nothing

Application.CommandBars("NameDerSymbolleiste"). _
      Controls(1).PasteFace
 
In folgendem Beispiel wird eine neue Symbolleiste mit drei Schaltflächen erstellt. Die Schaltflächensymbole werden mit der PasteFace-Methode von der zur Entwurfszeit vorbereiteten Dummy-Symbolleiste auf die Schaltflächen der neuen Symbolleiste kopiert.
 
Option Explicit

Private Const mc_CBAR_NAME_DUMMY As String = "VB-fun-Dummy"
Private Const mc_CBAR_NAME       As String = "VB-fun-Symbolleiste"
Private Const mc_CBARBTN_TAG     As String = "MyButton"

Public Sub CreateCommandBar()
  Dim objCBarDummy  As Office.CommandBar
  Dim objCBar       As Office.CommandBar

  Dim i             As Integer

  On Error Resume Next
  Set objCBarDummy = Application.CommandBars(mc_CBAR_NAME_DUMMY)
  If Err.Number <> 0 Then
    MsgBox "Uuuuuuppps, hier ist 'was schiefgelaufen !" & _
           vbCrLf & "Gibt es die Dummy-Symbolleiste '" & _
           mc_CBAR_NAME_DUMMY & "' überhaupt ?", vbQuestion, _
           Title:="VB-fun-Demo"
    Exit Sub
  End If

  Application.CustomizationContext = ThisDocument
  Call DeleteCommandBar

  On Error GoTo err_CreateCommandBar
  Set objCBar = Application.CommandBars.Add( _
        Name:=mc_CBAR_NAME, Temporary:=True)

  With objCBar
    .Visible = True
    .Position = msoBarTop
    .Protection = msoBarNoCustomize + msoBarNoChangeVisible
  End With

  For i = 1 To 3
    objCBar.Controls.Add Type:=msoControlButton
    With objCBar.Controls(i)
      .Style = msoButtonIcon
      .Tag = mc_CBARBTN_TAG & CStr(i)
      .OnAction = "TueIrgendEtwas"

      objCBarDummy.Controls(i).CopyFace
      .PasteFace
    End With
  Next

  With objCBar.Controls(3)
    .Style = msoButtonIconAndCaption
    .Caption = "Geschafft !"
    .BeginGroup = True
  End With

exit_Sub:
    On Error Resume Next
    ThisDocument.Saved = True

    Set objCBar = Nothing
    Set objCBarDummy = Nothing
    On Error GoTo 0
    Exit Sub

err_CreateCommandBar:
  MsgBox "Es ist ein Fehler bei der Erstellung der neuen " & _
          vbCrLf & "Symbolleiste aufgetreten !", _
          vbOKOnly + vbExclamation, Title:="VB-fun-Demo"
  Call DeleteCommandBar
  Resume exit_Sub
End Sub

Public Sub DeleteCommandBar()
  On Error Resume Next
  Application.CommandBars(mc_CBAR_NAME).Delete
  On Error GoTo 0
End Sub

Sub TueIrgendEtwas()
  If Not Application.CommandBars.ActionControl Is Nothing Then
    Select Case Application.CommandBars.ActionControl.Tag
      Case mc_CBARBTN_TAG & "1"
        MsgBox "Du hast die 1. neue Schaltfläche geklickt!", _
               vbOKOnly + vbInformation, Title:="VB-fun-Demo"

      Case mc_CBARBTN_TAG & "2"
        MsgBox "Du hast die 2. neue Schaltfläche geklickt!", _
               vbOKOnly + vbInformation, Title:="VB-fun-Demo"

      Case mc_CBARBTN_TAG & "3"
        MsgBox "Du hast die 3. neue Schaltfläche geklickt!", _
               vbOKOnly + vbInformation, Title:="VB-fun-Demo"
        
      Case Else
    End Select
  End If
End Sub
 
Weitere Links zum Thema
Symbolleiste erstellen

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Word-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (17 kB) Downloads bisher: [ 703 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Sonntag, 28. August 2011