Excel2003: Symbolleisten übertragen

Hallo Excel-Experten,

folgendes Problem:
ich habe mit Excel 2003 eine benutzerdefinierte Symbolleiste erstellt.
Diese Leiste habe ich an eine Datei „angefügt“, weil ich sie auch auf einem anderen Rechner brauche.
Wenn ich die Datei auf dem 2. Rechner starte, erscheint die Leiste auch wie gewünscht.
Jetzt habe ich die Leiste auf dem 1. Rechner um einege Buttons erweitert und wieder an die Datei angehängt.
Wenn ich die Datei jetzt auf dem 2. Rechner öffne, erscheint aber immer noch die alte Version der Leiste mit weniger Buttons.
Anscheinend klinkt sich die Leiste, obwohl sie doch an die Datei geknüpft sein sollte, in die Excel11.xlb des jeweiligen Rechners ein. Sie ist nämlich auch nach dem Schließen der Datei noch in Excel vorhanden.
Auch wenn ich auf dem 2. Rechner vor dem Öffnen der Datei die Leiste in Ecxel lösche, ist nach dem Öffnen der Datei die alte Version wieder da.
Kann man dieses Verhalten irgendwie beeinflussen?

Danke und Gruß, Andreas

Grüezi Andreas

ich habe mit Excel 2003 eine benutzerdefinierte Symbolleiste
erstellt.
Diese Leiste habe ich an eine Datei „angefügt“, weil ich sie
auch auf einem anderen Rechner brauche.
Wenn ich die Datei auf dem 2. Rechner starte, erscheint die
Leiste auch wie gewünscht.
Jetzt habe ich die Leiste auf dem 1. Rechner um einege Buttons
erweitert und wieder an die Datei angehängt.
Wenn ich die Datei jetzt auf dem 2. Rechner öffne, erscheint
aber immer noch die alte Version der Leiste mit weniger
Buttons.
Anscheinend klinkt sich die Leiste, obwohl sie doch an die
Datei geknüpft sein sollte, in die Excel11.xlb des jeweiligen
Rechners ein. Sie ist nämlich auch nach dem Schließen der
Datei noch in Excel vorhanden.

Ja, das ist korrekt - und wenn eine gleichnamige Leiste auf dem Rechner bereits vorhanden ist, wird die neue vernachlässigt.

Auch wenn ich auf dem 2. Rechner vor dem Öffnen der Datei die
Leiste in Ecxel lösche, ist nach dem Öffnen der Datei die alte
Version wieder da.
Kann man dieses Verhalten irgendwie beeinflussen?

Aber klar doch:
Der Königsweg ist, die Symbolleiste mit den Buttons per VBA im WorkBook_Open() jeweils komplett neu zu erstellen.

Eine neue angehängte Symbolleiste bekommst Du so auf den neuen Rechner:

  • Excel starten ohne diese Mappe.
  • Die Symbolleiste über Estras/Anpassen/Symbolleisten komplett löschen.
  • Excel schliessen und wieder öffnen (zur Kontrolle ob die Symbolleiste wirklich weg ist)
  • Die Mappe mit der neuen Symbolleiste öffnen

Nun müsstest Du die aktualisierte Symbolleiste auf dem Rechner haben.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hi Thomas

Grüezi Andreas

ich habe mit Excel 2003 eine benutzerdefinierte Symbolleiste

Aber klar doch:
Der Königsweg ist, die Symbolleiste mit den Buttons per VBA im
WorkBook_Open() jeweils komplett neu zu erstellen.

Ja, so werd’ ich’s dann wohl versuchen, denn das Folgende von dir beschriebene funktioniert zwar, ist aber für einen User, der nur die Datei mit der Symbolleiste benutzen will sehr umständlich.

Eine neue angehängte Symbolleiste bekommst Du so auf den neuen
Rechner:

  • Excel starten ohne diese Mappe.
  • Die Symbolleiste über Estras/Anpassen/Symbolleisten komplett
    löschen.
  • Excel schliessen und wieder öffnen (zur Kontrolle ob die
    Symbolleiste wirklich weg ist)
  • Die Mappe mit der neuen Symbolleiste öffnen

Nun müsstest Du die aktualisierte Symbolleiste auf dem Rechner
haben.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Vielen Dank, hat mir geholfen.

Gruß, Andreas

Der Königsweg ist, die Symbolleiste mit den Buttons per VBA im
WorkBook_Open() jeweils komplett neu zu erstellen.

Ja, so werd’ ich’s dann wohl versuchen, denn das Folgende von
dir beschriebene funktioniert zwar, ist aber für einen User,
der nur die Datei mit der Symbolleiste benutzen will sehr
umständlich.

Hallo Andreas,

zudem was Thomas sagte, sauberes programmieren bedeutet bei Start der einen Mappe auf dem Rechner diese Symbolleiste zu erstellen.
Aber auch bei Schließen der Mappe diese Symbolleiste wieder zu löschen.
Je nachdem auch bei auch bei Wechseln aus dieser Mappe in eine andere und zurück dementsprechend ide Leiste zeigen oder nicht.

Gruß
Reinhard

Grüezi Reinhard

Der Königsweg ist, die Symbolleiste mit den Buttons per VBA im
WorkBook_Open() jeweils komplett neu zu erstellen.

Ja, so werd’ ich’s dann wohl versuchen, denn das Folgende von
dir beschriebene funktioniert zwar, ist aber für einen User,
der nur die Datei mit der Symbolleiste benutzen will sehr
umständlich.

zudem was Thomas sagte, sauberes programmieren bedeutet bei
Start der einen Mappe auf dem Rechner diese Symbolleiste zu
erstellen.
Aber auch bei Schließen der Mappe diese Symbolleiste wieder zu
löschen.

Wenn die Symbolleiste nur als ‚Temporary‘ angelegt wird, wird sie beim Schliessen von Excel automatisch wieder gelöscht.

Je nachdem auch bei auch bei Wechseln aus dieser Mappe in eine
andere und zurück dementsprechend ide Leiste zeigen oder
nicht.

Wenn die Mappe alleine bearbeitet wird und Excel anschliessend wieder geschlossen sollte das nicht notwendig sein. Auch eine angefügte Symbolleiste ist sichtbar wenn die Mappe gewechselt wird.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Hallo,

hat es mit den Symbolleisten nicht eh ein Ende mit Version XL2007?
Daher söllte man dies ggf. gleich abändern, falls die Dateiversion auch dort Verwendung finden soll.

VG René

Grüezi René

hat es mit den Symbolleisten nicht eh ein Ende mit Version
XL2007?
Daher söllte man dies ggf. gleich abändern, falls die
Dateiversion auch dort Verwendung finden soll.

Nicht unbedingt - per VBA erzeugte Symbolleisten aus den älteren Versionen werden ab xl2007 im Reiter ‚AddIn‘ ausgegeben und die buttons funktionieren da dann noch genau so.

Wenn, dann würde ich da erst mit xl2010 wieder einsteigen, da sind dann die Ribbons wieder anpassbar(er).

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezie Thomas,

zudem was Thomas sagte, sauberes programmieren bedeutet bei
Start der einen Mappe auf dem Rechner diese Symbolleiste zu
erstellen.
Aber auch bei Schließen der Mappe diese Symbolleiste wieder zu
löschen.

Wenn die Symbolleiste nur als ‚Temporary‘ angelegt wird, wird
sie beim Schliessen von Excel automatisch wieder gelöscht.

wird wohl so sein wenn du es sagst.
Mir ist es persönlich lieber ich stelle das selbst sicher.

Je nachdem auch bei auch bei Wechseln aus dieser Mappe in eine
andere und zurück dementsprechend ide Leiste zeigen oder
nicht.

Wenn die Mappe alleine bearbeitet wird und Excel anschliessend
wieder geschlossen sollte das nicht notwendig sein. Auch eine
angefügte Symbolleiste ist sichtbar wenn die Mappe gewechselt
wird.

„Wenn die Mappe alleine bearbeitet“?
Ich schrieb doch wenn ich in eine andere Mappe (der gleichen Instanz) wechsle.

Sehr zugegeben, eigene Symbolleisten habe ich nur mal so für mich erstellt zum Testen.
a) wie das geht
b) wie man sie innerhalb der anderen Leisten positioniert usw.
c) halt mal so um zu experimentieren.

Relativ häufiger habe ich nur Symbole „oben“ erzeugt. Und dabei Wert darauf gelegt, daß diese eigenen Symbole die nur auf die eine Mappe bezogen sind, gar nur auf ein Blatt dieser Mappe, in anderen Mappen/Blättern nicht zu sehen waren.
Nach dem Schließen dieser einen Mappe dann auch nicht.

Spricht etwas aus deiner Ansicht heraus dagegen es so zu tun?

Gruß
Reinhard

Grüezi Reinhard

Wenn die Symbolleiste nur als ‚Temporary‘ angelegt wird, wird
sie beim Schliessen von Excel automatisch wieder gelöscht.

wird wohl so sein wenn du es sagst.
Mir ist es persönlich lieber ich stelle das selbst sicher.

Ich lass andere gern die Arbeit tun wenn das (wie in diesem Falle) zuverlässig passiert - bin halt ein fauler Hund, ich weiss, aber ich gelobe keine Besserung… :wink:

Wenn die Mappe alleine bearbeitet wird und Excel anschliessend
wieder geschlossen sollte das nicht notwendig sein. Auch eine
angefügte Symbolleiste ist sichtbar wenn die Mappe gewechselt
wird.

„Wenn die Mappe alleine bearbeitet“?
Ich schrieb doch wenn ich in eine andere Mappe (der gleichen
Instanz) wechsle.

Ja, klar - aber dann ist das Verhalten eben genau so wie wenn eine angehängte Symbolleiste mit der Mappe kommt und installiert wird.
Sie ist dann halt immer sicht- und verwendbar.

Relativ häufiger habe ich nur Symbole „oben“ erzeugt. Und
dabei Wert darauf gelegt, daß diese eigenen Symbole die nur
auf die eine Mappe bezogen sind, gar nur auf ein Blatt dieser
Mappe, in anderen Mappen/Blättern nicht zu sehen waren.
Nach dem Schließen dieser einen Mappe dann auch nicht.

Spricht etwas aus deiner Ansicht heraus dagegen es so zu tun?

Nö. Ist halt immer eine Frage des Geschmacks und der persönlichen Vorlieben.

Mit freundlichen Grüssen

Thomas Ramel

  • MVP für MS-Excel -

Grüezie Thomas,

„Wenn die Mappe alleine bearbeitet“?
Ich schrieb doch wenn ich in eine andere Mappe (der gleichen
Instanz) wechsle.

Ja, klar - aber dann ist das Verhalten eben genau so wie wenn
eine angehängte Symbolleiste mit der Mappe kommt und
installiert wird.
Sie ist dann halt immer sicht- und verwendbar.

aha, vielleicht liegt es meinem Excel-Wissen.
Was ist eine „angehängte Symbolleiste“?
Sorry, kenn das nicht :frowning:

Ich dachte bislang, jetzt auch, wenn ich eine Mappe versende und sie auf einem Fremdrechner geöffnet wird so gilt dort dessen Einstellungen zu Symbolleisten usw.
Außer ein Makro in der Mappe verändert das.

Spricht etwas aus deiner Ansicht heraus dagegen es so zu tun?

Nö. Ist halt immer eine Frage des Geschmacks und der
persönlichen Vorlieben.

Klingt gut, also mach ich weiter so oder auch nicht :smile:
Ich werte das so, es ist exakt gleichwertig und je nach meinem aktuellen fauleSocke-Status schrerib ich die Codezeilen oder nicht :smile:

Gruß
Reinhard

Hallo Reinhard,

da du mit Symbolleisten schon rumgespielt hast, hast du vielleicht auch einen Tip für mich:
Eine Symbolleiste per VBA zu erstellen und den Knöpfen Makros zuzuweisen klappt:

sub leiste()
 Dim cBar As CommandBar
 Dim b1 As CommandBarButton, b2 As CommandBarButton, \_ 
 b3 As CommandBarButton

 Set cBar = CommandBars.Add("MeineLeiste")
 Set b1 = cBar.Controls.Add(msoControlButton)
 Set b2 = cBar.Controls.Add(msoControlButton)
 Set b3 = cBar.Controls.Add(msoControlButton)

 b1.OnAction = "Makro1"
 b2.OnAction = "Makro2"
 b3.OnAction = "Makro3"
End Sub

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. Folgendermaßen habe ich es probiert:

  • Über Symbolleisten Anpassen habe ich einem Makrobutton ein eigenes Schaltflächensymbol gegeben und mit „Schaltflächensymbol kopieren“ in die Zwischenablage gelegt.
  • Dann in Paint kopiert und als bmp gespeichert.
  • 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. Deswegen habe ich dann auf einem Tabellenblatt der Mappe ein Quadrat gemalt und ihm als Hintergrund die bmp-Datei gegeben.

Nun weiß ich aber nicht weiter: Wie kriege ich per VBA dieses Bild als Schaltflächensymbol auf die Knöpfe?
Oder gibt es ne bessere Lösung?
Bin für Ideen und/oder Wissen dankbar.

Gruß, Andreas

Grüezi Andreas

da du mit Symbolleisten schon rumgespielt hast, hast du
vielleicht auch einen Tip für mich:

…vielleicht darf ich ja auch… :wink:

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

  • MVP für MS-Excel -
1 „Gefällt mir“

Hallo Thomas,

du bist ja auch so früh auf den Beinen.
Deine Makros laufen prima. Ich werde sie für meine Bedürfnisse noch ein bisschen anpassen.
Vielen Dank und *

Gruß, Andreas