|
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
|
|
|
|
|
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: [ 777 ]
|
|
|