Grüezi Andreas
da du mit Symbolleisten schon rumgespielt hast, hast du
vielleicht auch einen Tip für mich:
…vielleicht darf ich ja auch… 
Was ich noch nicht hinbekommen habe ist, den Knöpfen auch
Bildchen zu geben. Ich kann zwar mit CopyFace und PasteFace
etwas von anderen Knöfpen kopieren. Ich möchte aber, dass die
Knöpfe sebstgemachte Bildchen bekommen.
- Ich möchte vermeiden, dass ich extra Bilddateien weitergeben
muss, wenn ich die Excelmappe mit der Werkzeugleiste
weitergebe. Deswegen hätte ich gerne die Bilder irgendwie in
der Mappe mit drin.
Nun weiß ich aber nicht weiter: Wie kriege ich per VBA dieses
Bild als Schaltflächensymbol auf die Knöpfe?
Lege ein Tabellenblatt (hier in der Folge mit dem Namen ‚Pictures‘) an und speichere dort die Bilder drin ab. Dabei kannst Du bis xl2003 die Icons mit Excel bearbeiten und kopieren und dann in dieses Tabellenblatt einfügen. Gib jedem Bild einen aussagekräftigen Namen über den dieses später angesprochen wird.
Dann brauchst Du noch zwei Makros, eines um die Symbolleiste und eines um die Buttons darauf zu erzeugen, das habe ich so gelöst:
Diese hier erstellt die Symbolleiste und ruft dann die Erzeugung der Buttons darauf auf:
Sub CreateCB()
Dim cBar As CommandBar
Set cBar = Application.CommandBars.Add(Name:="Spalte\_Zeile\_cm", Temporary:=True)
CreateButton cBar, "Spaltenbreite in cm", "cmH", "Spaltenbreite"
CreateButton cBar, "Zeilenhöhe in cm", "cmV", "Zeilenhoehe"
cBar.Visible = True
End Sub
Diese Funktion erzeugt die Buttons, weist diesen die Makros zu (diese müssen in einem allgemeinen Modul der Mappe abgelegt sein) und kopiert die Bilder aus dem Tabellenblatt ‚Pictures‘ auf den gerade erzeugten Button. Alle diese Parameter werden beim Aufruf aus der obigen Sub an die Funktion übergeben.
Function CreateButton(objCB As CommandBar, \_
strCaption As String, \_
strPicture As String, \_
strMakro As String)
With objCB.Controls.Add(Temporary:=True)
.Style = msoButtonIcon
.Caption = strCaption
ThisWorkbook.Worksheets("Pictures").Shapes(strPicture).CopyPicture xlScreen, xlBitmap
.PasteFace
.OnAction = strMakro
End With
End Function
Ja, und das wars dann eigentlich auch schon.
Durch den Parameter ‚Temporary=True‘ beim erzeugen der Symbolleiste wird diese beim Schliessen von Excel automatisch entfernt.
Achja - im Workbook_Open() muss dann beim öffnen natürlich die Erzeugung der Symbolleiste noch angestossen werden:
Private Sub Workbook\_Open()
CreateCB
End Sub
Mit freundlichen Grüssen
Thomas Ramel