Symbolleisten und die xlb-Datei von Microsoft Excel Home Home

WB01727_.gif (1537 Byte)

Seiteninhalt
Auf dieser Seite erfahren Sie alles über Symbolleisten im Zusammenhang mit der xlb-Datei von Microsoft Excel.
Leserprofil
Alle Office-/Excel-Anwender und VB-/VBA-Programmierer

WB01727_.gif (1537 Byte)

Inhalt

Allgemeines über Symbolleisten

 

Inhalt und Aufbau der xlb-Datei

Welche Informationen sind in der xlb-Datei abgelegt?

Wie wird ein Schaltflächensymbol in der xlb-Datei gespeichert?

Wie werden Datei-/Pfad-Angaben eines Steuerelementes mit zugewiesenem Makro gespeichert?

 

Benutzung der xlb-Datei

Wann wird die xlb-Datei aktualisiert?

Kann man die Aktualisierung der xlb-Datei verhindern?

Was passiert bei exklusiv gesperrter xlb-Datei?

Wie kann man den Pfad- und Datei-Namen der xlb-Datei herausfinden?

Wie lautet der genaue Name der xlb-Datei und wo ist sie abgelegt?

Kann man die xlb-Datei in ein anderes Verzeichnis ablegen?

Kann man mehrere xlb-Dateien nebeneinander verwenden?

Kann man bei laufendem Excel eine andere xlb-Datei nachladen?

 

Behandlung von Problemen

Warum nimmt die Grösse meiner xlb-Datei auch ohne vorgenommene Anpassungen ständig zu?

Warum sollte man die xlb-Datei regelmässig defragmentieren?

Kann man die xlb-Datei reorganisieren bzw. komprimieren?

Kann eine xlb-Datei defekt werden?

Kann man eine defekte xlb-Datei reparieren?

Wie kann man die xlb-Datei zurücksetzen bzw. leeren, ohne ihren Pfad zu kennen?

Gibt es bekannte Probleme mit Symbolleisten, die an eine Arbeitsmappe angebunden sind?

 

Wie kann man eine einzelne Symbolleiste in eine neue xlb-Datei speichern?

Wie kann man mehrere Symbolleisten in eine neue xlb-Datei speichern?

Gibt es eine Möglichkeit, mit VBA eine benutzerdefinierte Symbolleiste an eine Mappe anzubinden?

Kann man eine Symbolleiste an ein Add-In anbinden?

Wie kann man eine einzelne Symbolleiste auf die Arbeitsstationen vieler Benutzer kopieren?

Wie erstellt man eine Liste der Symbolleisten mit allen Steuerelementen und Menübefehlen?

Wie kann man eine Symbolleiste eindeutig identifizieren?

Wie kann man eine Symbolleiste kopieren?

 

Links und Downloads
  Bugs und Probleme

  Weitere Informationen
  Downloads

Zum Seitenanfang


Allgemeines über Symbolleisten

...

 

Nachfolgend finden Sie viele interessante Informationen über die xlb-Datei von Microsoft Excel.

 

Zum Seitenanfang


Welche Informationen sind in der xlb-Datei abgelegt?

In der xlb-Datei von Microsoft Excel sind - vereinfacht ausgedrückt - alle veränderbaren Merkmale von Symbolleisten und Steuerelementen gespeichert. Das betrifft
- sowohl integrierte als auch benutzerdefinierte Symbolleisten und
- sowohl integrierte als auch benutzerdefinierte Steuerelemente.

Hier eine Liste der gespeicherten Merkmale (kein Anspruch auf Vollständigkeit und alle Angaben ohne Gewähr):

Merkmal Beschreibung
Bildschirmposition aller Symbolleisten Für jede Symbolleiste, egal ob integriert und benutzerdefiniert, wird die beim Beenden von Excel verwendete Bildschirmposition gespeichert. Dazu gehört die Position oben (Top) und links (Left).
Grösse aller Symbolleisten Für jede Symbolleiste, egal ob integriert und benutzerdefiniert, wird die beim Beenden von Excel verwendete Grösse gespeichert. Dazu gehören Höhe (Height) und Breite (Width) der Symbolleiste.
Stil aller Symbolleisten Für jede Symbolleiste, egal ob integriert und benutzerdefiniert, wird der beim Beenden von Excel verwendete Stil gespeichert. Dazu gehört Verankerung (Floating) und Verankerungsreihenfolge (Rowindex).
Alle Eigenschaften der benutzerdefinierten Symbolleisten Zu jeder benutzerdefinierten Symbolleiste werden alle Eigenschaften gespeichert.

Name (Name), Typ (Type), Sichtbarkeit (Visible), Schutz (Protection) u.a.

Geänderte Eigenschaften der integrierten Symbolleisten Wenn bei einer integrierten Symbolleiste eine Eigenschaft geändert wurde, so wird die neue Eigenschaftseinstellung gespeichert.

Verfügbarkeit (Enabled), Sichtbarkeit (Visible), Schutz (Protection) u.a.

Alle Eigenschaften der benutzerdefinierten Steuerelemente Bezeichnung (Caption), Typ (Type), Verfügbarkeit (Enabled), Sichtbarkeit (Visible), zugewiesenes Makro (OnAction), Symbol-Id (FaceId) u.a.
Geänderte Eigenschaften der integrierten Steuerelemente Bezeichnung (Caption), Verfügbarkeit (Enabled), Sichtbarkeit (Visible), zugewiesenes Makro (OnAction), Symbol-Id (FaceId) u.a.
Selbst erstellte/bearbeitete Steuerelementsymbole (siehe Anmerkung)

Anmerkung

Sobald das Symbol eines Steuerelementes anhand des integrierten Schaltflächen-Editors verändert wird, wird das Symbol in der xlb-Datei gespeichert.

 


Wie wird ein Schaltflächensymbol in der xlb-Datei gespeichert?

Das Symbol einer Schaltfläche ist eine 16 x 16 Punkte grosse Grafik, welche 16 verschiedene, festgelegte Farben sowie eine Farbe für 'Transparenz' besitzen kann. Der Farbton einer Farbe kann nicht verändert werden.

Schaltflächen-Editor
Abbildung: Editor für Schaltflächen-Symbole

Jedes nicht-integrierte Symbol wird in der xlb-Datei gespeichert. Integrierte Symbole sind Symbole, die fest in einer Systemdatei von Microsoft Office abgelegt sind. Sie besitzen grundsätzlich eine so genannte FaceID. Die FaceID ist eine eindeutige Kennung (eine Ganzzahl) und wird als Symbolnummer benutzt.

Ein nicht-integriertes Symbol entsteht, wenn man das Bild anhand des Schaltflächen-Editors ändert oder ein Bild einfügt (Menübefehl Schaltflächensymbol einfügen). Ein solches Symbol wird 1 zu 1 in die xlb-Datei geschrieben, d.h. jeder Bildpunkt der Grafik. Es findet dabei keine Komprimierung statt. Egal ob es sich um eine aufwändige, mehrfarbige Grafik oder lediglich um eine weisse Fläche handelt; die Anzahl Daten eines Symboles ist immer gleich.

Standard-Symbole
Abbildung: Standard-Symbole

 

Nebenbei erwähnt besitzt der Editor den meiner Meinung nach eher unpassenden Namen "Schaltflächen-Editor". Besser wäre beispielsweise "Symbol-Editor", da ja nicht die Schaltfläche sondern dessen Symbol editiert wird.

 


Wann wird die xlb-Datei aktualisiert?

Nicht ganz uninteressant sind die Regeln, ob die xlb-Datei aktualisiert wird oder nicht. Grundsätzlich wird die Datei beim Beenden von Microsoft Excel aktualisiert, jedoch nicht in allen Situationen.

Hier eine nicht abschliessende Übersicht:
» Wenn Microsoft Excel gestartet und anschliessend geschlossen wird, wird die xlb-Datei üblicherweise nicht aktualisiert.
- Die xlb-Datei wird beim Beenden von Microsoft Excel aktualisiert, sofern irgend eine Anpassung an einer Symbolleiste, einem Menü oder einem Steuerelement vorgenommen wurde.
- Die xlb-Datei wird beim Beenden aktualisiert, wenn eine Anpassung mittels VBA-Programmcode durchgeführt wurde. Es spielt dabei keine Rolle, ob die Anpassung nur temporärer oder dauerhaft ist.
- Die xlb-Datei wird ebenfalls aktualisiert, wenn in Excel der Anpassen-Dialog (Menübefehl Extras/Anpassen oder Ansicht/Symbolleisten/Anpassen) geöffnet und geschlossen wurde, auch wenn in diesem Dialog keine Einstellung geändert und keine Funktion ausgeführt wurde.

Anpassen-Dialog von Excel
Abbildung: Anpassen-Dialog von Microsoft Excel

Dieses Verhalten kann man sich in einem VBA-Programm zunutze machen, wenn man erreichen will, dass die xlb-Datei aktualisiert wird. Man muss lediglich den Anpassen-Dialog öffnen und gleich wieder schliessen. Beachten Sie jedoch unbedingt die nachfolgend beschriebene Spezialität.

Gewöhnlich öffnet man einen integrierten Excel-Dialog, indem man die Show-Methode der Dialogs-Auflistung verwendet:

  Application.Dialogs(xlDialogAttachToolbars).Show

Die vollständige Prozedur zum Öffnen und Schliessen des Dialogfensters sähe dann so aus:

Sub ForceXLBFileRefresh()
  AppActivate "Microsoft Excel"
  SendKeys "{esc}"
  Application.Dialogs(xlDialogAttachToolbars).Show
End Sub

Wenn Sie obige Prozedur verwenden, werden Sie feststellen, dass die xlb-Datei nicht wie eigentlich erwartet aktualisiert wird. Die Ursache dafür ist, dass nicht der Dialog bestimmt, dass die xlb-Datei aktualisiert werden muss sondern die hinter dem Excel-Menübefehl "Anpassen" stehende Funktion, welche für die Anzeige des Anpassen-Dialoges zuständig ist. Folglich muss dieser Menübefehl ausgeführt werden, damit das Excel-interne "xlb-Datei muss aktualisiert werden"-Flag gesetzt wird. Das erreicht man ganz einfach, indem man den Menübefehl aufgeruft (Execute-Methode des CommandBarControl ausführen).

Sub ForceXLBFileRefresh()
  AppActivate "Microsoft Excel"
  SendKeys "{esc}"
  Application.CommandBars.FindControl(Id:=797).Execute
End Sub

 

Alle Symbolleisten in die verwendete xlb-Datei schreiben:

Dim bolRC As Boolean
bolRC = Application.ExecuteExcel4Macro("SAVE.TOOLBAR(,)")

 

 


Was passiert bei exklusiv gesperrter xlb-Datei?

Wenn die xlb-Datei in einem Programm geöffnet ist, welches die Datei im exklusiven Zugriffsmodus verwendet, ist die Datei gesperrt und kann folglich von Microsoft Excel nicht gelesen werden. Microsoft Excel ignoriert beim Start die gesperrte Datei und öffnet die Arbeitsoberfläche mit den Default-Symbolleisten. Wenn man eine Änderung an einer Symbolleiste vornimmt und dann Excel beendet, kann die xlb-Datei wiederum nicht benutzt werden. In diesem Fall wird Excel beendet, ohne dass die Datei aktualisiert wird. Die vorgenommenen Änderungen sind dann verloren.

Wenn man beispielsweise irrtümlich eine Symbolleiste gelöscht hat, so kann man die xlb-Datei sperren, während Excel geöffnet ist. Beim Beenden von Excel kann die xlb-Datei somit nicht aktualisiert werden. Dadurch wird die Symbolleiste nicht gelöscht und ist nach dem nächsten Start wieder vorhanden. Damit Sie die xlb-Datei nicht mit einem anderen Programm exklusiv zu öffnen brauchen, können Sie auch das Schreibgeschützt-Attribut der Datei setzen. Dies hat den gleichen Effekt wie eine gesperrte Datei.

Zu Beachten
Bevor Sie Microsoft Excel erneut starten, muss die xlb-Datei unbedingt entsperrt sprich das Schreibgeschützt-Attribut entfernt werden. Anderenfalls wird Excel ohne Laden der xlb-Datei gestartet und somit nur die Default-Symbolleisten angezeigt.

 


Wie werden Datei-/Pfad-Angaben eines Steuerelementes mit zugewiesenem Makro gespeichert?

Um es kurz zu machen: Es wird immer der absolute Dateipfad in der xlb-Datei gespeichert, d.h. vollständiger Pfad und Dateiname. Hier ein Beispiel:

'D:\Programme\Microsoft Office\Office\XlStart\Personl.xls'!GetRecords

Dass der absolute Dateipfad gespeichert wird, kann man gut nachvollziehen, da beim Aufrufen des Makros Excel ja wissen muss, in welcher Datei es abgelegt ist und wo sich diese auf der Festplatte befindet. In Excel selbst ist dies jedoch alles andere als klar erkennbar. Ist die Datei mit dem enthaltenen Makro nämlich bereits in der gleichen Excel-Sitzung geöffnet, wird der Pfad der Datei schlicht ignoriert. Das bedeutet, dass das Makro auch dann gefunden wird, wenn die Pfadangabe falsch ist. Um nochmal auf das obige Beispiel zurückzukommen, würde das Makro "GetRecords" auch dann ausgeführt, wenn die Datei Personl.xls geöffnet ist, in der xlb-Datei aber ein falscher Pfad dieser Datei gespeichert ist. Beispiel:

'C:\Windows\Anwendungsdaten\Microsoft\Excel\Personl.xls'!GetRecords

Warum das so ist, erkläre ich später. Zuerst ein paar wichtige Basisinformationen:

Grundsätzlich kann man jeder Schaltfläche und jedem Menübefehl ein Makro zuweisen. Die Zuweisung erfolgt über den entsprechenden Menübefehl des Kontextmenüs, welches beim Anpassen eines Steuerelementes geöffnet werden kann.

Kontextmenü beim Anpassen eines Steuerelementes
Abbildung: Kontextmenü beim Anpassen eines Steuerelementes

Die nächste Abbildung zeigt das Dialogfenster "Zuweisen", das beim Ausführen des oben erwähnten Menübefehls erscheint.

Makro zuweisen anhand des Makros-Dialoges
Abbildung: Makro zuweisen anhand des Makros-Dialoges

Wenn die Datei Personl.xls geöffnet ist, berücksichtigt Excel nur den Datei- und Makronamen. Es sucht das Makro somit in der geöffneten Datei (und findet es auch).

 


Wie kann man den Pfad- und Datei-Namen der xlb-Datei herausfinden?

Wie bereits an anderen Stellen erwähnt wurde, befindet sich die xlb-Datei je nach Excel-Version, Windows-Version, Windows-Sprachversion und Benutzerprofil in einem festgelegten Ordner und verwendet einen ganz bestimmten Dateinamen.

Wo sich die Datei befindet und wie sie heisst erfahren Sie hier:

Weitere Informationen

Wie lautet der genaue Name der xlb-Datei und wo ist sie abgelegt?

 


Kann man die xlb-Datei in ein anderes Verzeichnis ablegen?

Nein, das ist nicht möglich. Microsoft Excel sucht beim Programmstart die xlb-Datei in genau dem Verzeichnis, in welchem sie sich aufgrund Excel-Version, Windows-Version, Windows-Sprachversion und Benutzerprofil befinden muss. Wenn Sie die Datei in ein anderes Verzeichnis verschieben oder die Datei umbenennen, findet Excel die Datei nicht und startet ohne benutzerdefinierte Symbolleisten und Schaltflächen. Beim Beenden von Excel wird dann automatisch eine neue xlb-Datei angelegt.

 


Kann man mehrere xlb-Dateien nebeneinander verwenden?

Mit "nebeneinander verwenden" ist gemeint, ob es möglich ist, mehrere xlb-Dateien (mit unterschiedlichen Dateinamen) anzulegen, damit Microsoft Excel je nach Bedarf mit einer bestimmten xlb-Datei gestartet werden kann.

Excel startet immer mit der gleichen xlb-Datei.

 

Restliche Beschreibung folgt...

 


Warum nimmt die Grösse meiner xlb-Datei auch ohne vorgenommene Anpassungen ständig zu?

Es gibt in Microsoft Excel einen Bug, der allerdings offiziell nicht existiert. Tatsache ist aber, dass es ein Problem gibt, das zu einer laufend grösser werdenden xlb-Datei führt.

 

Restlicher Text folgt...

28869
29087
29305
29523
29741
29959

 


Kann man die xlb-Datei reorganisieren bzw. komprimieren?

Komprimieren kann man sie nicht (im Sinne einer Daten-Komprimierung). Man kann aber den Inhalt der xlb-Datei reorganisieren. Dadurch wird die Dateigrösse reduziert.

 

 


Kann eine xlb-Datei defekt werden?

Ja. Diese Gefahr existiert übrigens nicht nur bei grösseren xlb-Dateien, sondern auch bei kleinen. Es ist ohne weiteres möglich, dass auch eine kleine, beispielsweise lediglich 30 KB grosse Datei defekt wird. Eine defekte xlb-Datei kann von Microsoft Excel nicht mehr geladen werden. Als Folge startet Excel ohne die durch den Anwender angepassten Symbolleisten und Schaltflächen.

 


Kann man eine defekte xlb-Datei reparieren?

Nein. Eine defekte xlb-Datei ist und bleibt für immer unbrauchbar. Der Inhalt der Datei ist praktisch immer derart stark beschädigt, dass eine Reparatur oder Wiederherstellung nicht mehr möglich ist. Abgesehen davon gibt es keine Tools, mit denen man eine Reparatur automatisch durchführen könnte.

 


Wie kann man die xlb-Datei zurücksetzen bzw. leeren, ohne ihren Pfad zu kennen?

Microsoft Excel bietet keine explizite Funktionalität, mit der man die xlb-Datei zurücksetzen kann. Man kann zwar die xlb-Datei ganz einfach löschen, weil Excel automatisch eine neue, leere xlb-Datei generiert. Dazu muss jedoch der Ordner bekannt sein, in welchem sich die Datei befindet.

Bei Microsoft Excel 97 gibt es eine Möglichkeit, wie man die bestehende xlb-Datei durch eine neue ersetzen kann, ohne zu wissen, wo die Datei abgelegt ist. Starten Sie ganz einfach Excel mit dem Parameter '/i'.

Achtung: Bitte lesen Sie unbedingt die Hinweise über die Gefahren dieses Parameters auf dieser Seite:

Weitere Informationen

Excel-Startparameter: Parameter '/i'

 


Wie kann man eine einzelne Symbolleiste in einer andere xlb-Datei kopieren?

Text folgt...

 

Excel 4-Makro

 

 


Wie lautet der genaue Name der xlb-Datei und wo ist sie abgelegt?

Microsoft Excel verwendet für die Speicherung der benutzerdefinierten Symbolleisten und Schaltflächen/Menübefehlen eine Datei mit der Dateinamenerweiterung 'xlb'. Leider gibt es keine Möglichkeit, mit der man den genauen Namen dieser Datei sowie ihr Speicherort abfragen kann - weder in Excel noch anhand eines VBA-Programmes. Es existiert auch kein Registry-Eintrag mit diesen Informationen. Die Logik, wie Dateiname und Pfad ermittelt wird, ist fest in Microsoft Excel einprogrammiert.

Sowohl Dateiname als auch Ordnername können je nach verwendeter Windows- und Excel-Version verschieden sein. Auch der Umstand, ob sich der Benutzer in Windows anmelden musste (d.h. er besitzt ein Benutzerprofil), spielt eine Rolle. Es muss allerdings beachtet werden, dass bei Microsoft Excel 97 die xlb-Datei auch dann den Benutzernamen verwendet, wenn sich der Benutzer nicht in Windows anmelden musste, dieser jedoch ein Profil besitzt oder besass.

Des weiteren heissen die Ordner je nach Sprache der Windowsversion unterschiedlich (z.B. heisst das deutsche Verzeichnis 'Anwendungsdaten' in der englischen Version 'Application Data' und das Verzeichnis 'Dokumente und Einstellungen' heisst 'Documents and Settings'). Aber auch hier gibt es Spezialfälle: Beispielsweise lautet der Name des Ordners für die Profile sowohl in der deutschen als auch in der englischen Version von Windows NT 4 'Profiles'.

Hier eine Tabelle mit den Datei- und Pfad-Namen der xlb-Datei:

Excel-
Version
Windows-
Version
Dateiname
ohne Profil
Dateiname
mit Profil
Dateipfad
ohne Profil
Dateipfad
mit Profil
Excel 97 Windows 95 Excel8.xlb <Benutzername>8.xlb \\Windows \\Windows
  Windows 98 Excel8.xlb <Benutzername>8.xlb \\Windows \\Windows
  Windows ME Excel8.xlb <Benutzername>8.xlb \\Windows \\Windows
  Windows NT Excel8.xlb <Benutzername>8.xlb \\WinNT \\WinNT
  Windows 2000 Excel8.xlb <Benutzername>8.xlb \\WinNT \\WinNT
  Windows XP Excel8.xlb <Benutzername>8.xlb \\Windows \\Windows
Excel 2000 Windows 95 Excel.xlb Excel.xlb \\Windows \\Windows\Anwendungsdaten\Microsoft\Excel
\\Windows\Application Data\Microsoft\Excel
  Windows 98 Excel.xlb Excel.xlb \\Windows \\Windows\Anwendungsdaten\Microsoft\Excel
\\Windows\Application Data\Microsoft\Excel
  Windows ME Excel.xlb Excel.xlb \\Windows \\Windows\Anwendungsdaten\Microsoft\Excel
\\Windows\Application Data\Microsoft\Excel
  Windows NT Excel.xlb Excel.xlb \\WinNT \\WinNT\Profile\<Benutzername>\Anwendungsdaten\Microsoft\Excel
\\WinNT\Profiles\<Benutzername>\Application Data\Microsoft\Excel
  Windows 2000 Excel.xlb Excel.xlb \\WinNT \\Dokumente und Einstellungen\<Benutzername>\Anwendungsdaten\Microsoft\Excel
\\Documents and Settings\<Benutzername>\Application Data\Microsoft\Excel
  Windows XP Excel.xlb Excel.xlb \\Windows \\Dokumente und Einstellungen\<Benutzername>\Anwendungsdaten\Microsoft\Excel
\\Documents and Settings\<Benutzername>\Application Data\Microsoft\Excel
Excel XP Windows 95 Excel10.xlb Excel10.xlb \\Windows \\Windows\Anwendungsdaten\Microsoft\Excel
\\Windows\Application Data\Microsoft\Excel
  Windows 98 Excel10.xlb Excel10.xlb \\Windows \\Windows\Anwendungsdaten\Microsoft\Excel
\\Windows\Application Data\Microsoft\Excel
  Windows ME Excel10.xlb Excel10.xlb \\Windows \\Windows\Anwendungsdaten\Microsoft\Excel
\\Windows\Application Data\Microsoft\Excel
  Windows NT Excel10.xlb Excel10.xlb \\WinNT \\WinNT\Profile\<Benutzername>\Anwendungsdaten\Microsoft\Excel
\\WinNT\Profiles\<Benutzername>\Application Data\Microsoft\Excel
  Windows 2000 Excel10.xlb Excel10.xlb (gleich wie mit Profil) \\Dokumente und Einstellungen\<Benutzername>\Anwendungsdaten\Microsoft\Excel
\\Documents and Settings\<Benutzername>\Application Data\Microsoft\Excel
  Windows XP Excel10.xlb Excel10.xlb (gleich wie mit Profil) \\Dokumente und Einstellungen\<Benutzername>\Anwendungsdaten\Microsoft\Excel
\\Documents and Settings\<Benutzername>\Application Data\Microsoft\Excel
Excel 2003   Excel11.xlb Excel11.xlb    

Anmerkung: Mit "<Benutzername>" ist der Anmeldename bzw. Profilname des Windows-Benutzers gemeint.

 

Tipp: Freeware-Tool 'XLB-Defragmentor' einsetzen
Mit dem Tool XLB-Defragmentor können Sie auf Knopfdruck den Pfad- und Dateiname der von Microsoft Excel benutzten xlb-Datei herausfinden.

Das Tool kann auf der Download-Seite heruntergeladen werden.

Gehe zur Download-Seite  Hier geht's zur Download-Seite

Der XLB-Defragmentor kann natürlich nicht nur den Pfad und Namen der xlb-Datei herausfinden sondern noch sehr viel mehr. Die Produkt-Webseite des XLB-Defragmentors finden Sie hier:

XLB-Defragmentor Produkt-Webseite

 

Hinweise für Programmierer

Damit man mit einem Programm Dateiname und Pfad der xlb-Datei herausfinden kann, werden verschiedene Basis-Informationen benötigt:
» Excelversion - damit man weiss, welche Zahl im Dateiname vorkommt (8, 10 oder 11; 9 gibt es nicht)
» Windowsverzeichnis - damit man weiss, ob der Windowsverzeichnisname "Windows" oder "WinNT" lautet
» Sprache der Windowsversion - damit man weiss, ob die Ordner z.B. deutsche oder englische Namen besitzen
» Windows-Benutzername - damit man weiss, wie der xlb-Dateiname (Excel 97) bzw. der Benutzer-Ordner (ab Excel 2000) lautet

Excelversion abfragen
Mit einem VBA-Programm in Excel:

  strExcelVersion = Application.Version

Mit einem VBA-Programm ausserhalb Excel oder einem VB-Programm:

  Dim xlApp As Object
  Set xlApp = CreateObject("Excel.Application")
  strExcelVersion = xlApp.Version
  xlApp.Quit
  Set xlApp = Nothing

Windows-Benutzername abfragen
Mit dem 'Network'-Objekt:

  Dim objWSH As Object
  Set objWSH = CreateObject("WScript.Network")
  strUserName = objWSH.UserName
  Set objWSH = Nothing

Windowsverzeichnis abfragen
Mit der 'windir'-Umgebungsvariable:

  strWinDir = Environ("windir")

Mit dem 'FileSystemObject'-Objekt:

  Dim objFSO As Object
  Set objFSO = CreateObject("Scripting.FileSystemObject")
  strWinDir = objFSO.GetSpecialFolder(0)   '0 = Windows-Verzeichnis
  Set objFSO = Nothing

 

So wird dann beispielsweise die xlb-Datei von Microsoft Excel 97 abgefragt:

If Left$(strExcelVersion, 1) = "8" Then
  strXLBFileName = Dir(strWinDir & "\" & strUserName & "8.xlb")
  strXLBPath = strWinDir

End If

 

Weitere Informationen über die xlb-Datei und Symbolleisten erhalten Sie hier:

Weitere Informationen

Welche Hintergrund-Informationen gibt es über die xlb-Datei von Excel?

Wie kann man eine einzelne Symbolleiste auf die Arbeitsstationen vieler Benutzer kopieren?

Wo befinden sich die Exceldateien mit den benutzerspezifischen Einstellungen?

Gibt es eine Möglichkeit, mit VBA eine benutzerdefinierte Symbolleiste an eine Mappe anzubinden?

Funktionen und Features: Symbolleistendatei (xlb)

 


Gibt es eine Möglichkeit, mit VBA eine benutzerdefinierte Symbolleiste an eine Mappe anzubinden?

Vielleicht haben Sie als Excel-Benutzer schon mal eine benutzerdefinierte Symbolleiste an eine Arbeitsmappe angebunden. Das lässt sich über die Schaltfläche "Anbinden" auf dem "Anpassen"-Dialogfenster bewerkstelligen.

Anpassen-Dialog in Microsoft Excel
Abbildung: Anpassen-Dialog von Microsoft Excel

Wenn Sie auf die Schaltfläche "Anbinden" klicken, erscheint das "Symbolleiste anbinden"-Dialogfenster:

Symbolleiste anbinden-Dialogfenster
Abbildung: Symbolleiste anbinden-Dialog von Microsoft Excel

In Microsoft Excel ist das Anbinden von Symbolleisten an eine Mappe somit kein Problem. Anders sieht es aus, wenn Sie das Gleiche anhand eines VBA-Programmes durchführen wollen. In der Objektbibliothek von Microsoft Excel existiert nämlich keine Funktion (Methode) zu diesem Zweck. Es muss daher eine andere Lösung gefunden werden.

 

Der Weg zur VBA-Lösung

Mit SendKeys kann man vereinfacht ausgedrückt einen Benutzer simulieren, der eine oder mehrere Tasten auf der Tastatur drückt. Wenn Sie Erfahrung mit der SendKeys-Anweisung von VBA haben, dann ist Ihnen vermutlich aufgefallen, dass sich damit so ziemlich alles lösen lässt, wenn es um das Steuern von Dialogfenstern geht. Der "Symbolleiste anbinden"-Dialog stellt da keine Ausnahme dar.

Welche Tasten müssen an das Dialogfenster gesendet werden?
Der erste Schritt zur VBA-Lösung besteht darin herauszufinden, welche Tasten in welcher Reihenfolge an das Dialogfenster gesendet werden müssen. Dazu öffnen wir wie gewohnt in Excel den "Symbolleisten anbinden"-Dialog, kopieren alle Symbolleisten in die aktuelle Arbeitsmappe und schliessen den Dialog wieder. Alle gedrückten Tasten notieren wir am besten auf einem Blatt Papier.

Wie viele benutzerdefinierte Symbolleisten existieren?
Wie wir festgestellt haben, wird mit der Leer-Taste ein in der Liste aufgeführter Symbolleisteneintrag markiert bzw. die Markierung aufgehoben. Weil man nicht feststellen kann, ob ein Eintrag aktuell ein- oder ausgeschaltet ist, muss zuerst die exakte Anzahl benutzerdefinierter Symbolleisten herausgefunden werden. Die ermittelte Zahl wird dann in Form von Leertasten-Anschläge an das "Symbolleisten anbinden"-Dialogfenster gesendet.

Hier der Programmcode zum Zählen der benutzerdefinierten Symbolleisten:

Function GetCustomCommandBarsCount() As Integer
  Dim intCustomBars As Integer
  Dim intCounter As Integer
  intCustomBars = 0
  For intCounter = 1 To Application.CommandBars.Count
    If Application.CommandBars(intCounter).BuiltIn = False Then
      intCustomBars = intCustomBars + 1
    End If
  Next intCounter
  GetCustomCommandBarsCount = intCustomBars
End Function

Übrigens ist es irrelevant, ob eine benutzerdefinierte Symbolleiste in der Liste "Symbolleisten" des "Anpassen"-Dialoges aufgeführt ist oder nicht (das wird mit der CommandBar-Eigenschaft Enabled festgelegt). Im "Symbolleiste anbinden"-Dialog sind immer sämtliche benutzerdefinierten Symbolleisten aufgelistet.

Wie wird der "Symbolleiste anbinden"-Dialog geöffnet?
Der "Symbolleiste anbinden"-Dialog kann auf verschiedene Wege geöffnet werden. Nachfolgend drei Möglichkeiten:

1) Über den "Anpassen"-Menübefehl und die "Anbinden"-Schaltfläche
   SendKeys "%a"
   Application.CommandBars.FindControl(Id:=797).Execute

2) Über den xlDialogShowToolbar-Dialog der Dialogs-Auflistung und die "Anbinden"-Schaltfläche
   SendKeys "%a"
   Application.Dialogs(xlDialogShowToolbar).Show

3) Über den xlDialogAttachToolbars-Dialog der Dialogs-Auflistung
   Application.Dialogs(xlDialogAttachToolbars).Show

Die dritte Variante ist die schnellste und zugleich sicherste Lösung, da der "Symbolleiste anbinden"-Dialog direkt - also nicht via "Anpassen"-Dialog - geöffnet und die Dialogs-Auflistung verwendet wird. Die FindControl-Methode besitzt leider den - allerdings vernachlässigbaren - Nachteil, dass ein Fehler auftritt, falls der Benutzer den "Anpassen"-Menübefehl entfernt hat.

Hier die fertige VBA-Prozedur, mit der alle benutzerdefinierten Symbolleisten an die aktive Arbeitsmappe angebunden werden:

Sub AttachCommandBarsToWorkbook()
  Dim intCounter As Integer
  Dim intCustomBars As Integer
  intCustomBars = GetCustomCommandBarsCount() 
'Funktion zum Herausfinden der Anzahl benutzerdefinierter Symbolleisten aufrufen
  AppActivate "Microsoft Excel"
 
'Tabulator-Taste drücken, damit das linke Listenfeld den Fokus erhält und einmal die
  'Leer-Taste drücken, damit das oberste Listenelement selektiert wird

  SendKeys "{tab} "
  For intCounter = 1 To intCustomBars
    'Pro Listenelement einen Eintrag nach unten gehen und dann die Leer-Taste drücken,

    'damit nacheinander jeder Eintrag (dazu-)selektiert wird

    SendKeys "{down} "
  Next intCounter
  'Alt+K drücken für Klick auf "Kopieren"-Schaltfläche auslösen
  'Tabluator-Taste drücken, damit die "OK"-Schaltfläche zur Default-Schaltfläche wird

  'Eingabe-Taste drücken für Klick auf "OK"-Schaltfläche auslösen
  SendKeys "%k{tab}{enter}"
  'Dialog "Symbolleiste anbinden" öffnen

  Application.Dialogs(xlDialogAttachToolbars).Show
End Sub

 

Weitere Informationen über benutzerdefinierte Symbolleisten finden Sie hier:

Weitere Informationen

Wie kann man eine einzelne Symbolleiste auf die Arbeitsstationen vieler Benutzer kopieren?

 


Wie kann man eine einzelne Symbolleiste auf die Arbeitsstationen vieler Benutzer kopieren?

Es gibt eine interessante Möglichkeit, wie sich das äusserst einfach und effizient durchführen lässt. Spontan schlage ich gewöhnlich vor, ein kleines VBA-Programm zu schreiben, mit dem die Symbolleiste den Benutzern zur Verfügung gestellt wird. Doch es gibt eine viel einfachere Lösung.

Benutzerdefinierte Symbolleiste an eine Mappe anbinden und diese Mappe dann als Add-In speichern (xla-Datei). Als Speicherort den zusätzlichen Startordner von Microsoft Excel verwenden.

Weitere Informationen zum Thema Symbolleisten und xlb-Datei finden Sie hier:

Weitere Informationen

Welche Hintergrund-Informationen gibt es über die xlb-Datei von Excel?

Wie lautet der genaue Name der xlb-Datei und wo ist sie abgelegt?

Wo befinden sich die Exceldateien mit den benutzerspezifischen Einstellungen?

Gibt es eine Möglichkeit, mit VBA eine benutzerdefinierte Symbolleiste an eine Mappe anzubinden?

Funktionen und Features: Symbolleistendatei (xlb)

 


Wie kann man eine einzelne Symbolleiste in eine neue xlb-Datei speichern?

 

Sub SaveCommandBar()

  Dim bolRC As Boolean

  bolRC = Application.ExecuteExcel4Macro("SAVE.TOOLBAR(""Symbolleiste1"",""C:\Symbolleiste.xlb"")")

  If bolRC = True Then

    MsgBox "Die Symbolleiste wurde gespeichert.", vbInformation

  Else

    MsgBox "Die Symbolleiste konnte nicht gespeichert werden!", vbExclamation

  End If

End Sub

 

 


Wie erstellt man eine Liste der Symbolleisten mit allen Steuerelementen und Menübefehlen?

 

Der nachstehende Programmcode listet alle Steuerelemente der Symbolleisten auf. Bei jedem Steuerelement, welchem ein Makro zugewiesen ist, wird der Name des Makros ausgegeben.

Die Liste wird auf einem neuen Arbeitsblatt der aktiven Arbeitsmappe erstellt und zeigt die drei Spalten "Symbolleiste" (Name der Symbolleiste), "Steuerelement" (Beschriftung/Caption des Steuerelementes) und "Makro" (Name der Makroprozedur, inkl. Dateiname und Dateipfad, wenn sich das Makro in einer anderen Mappe/Add-In befindet).

Anhand der Konstante ONLYCONTROLSWITHMACRO können Sie bestimmen, ob nur Steuerelemente aufgelistet werden sollen, denen ein Makro zugewiesen ist (Konstante auf True stellen), oder ob alle Steuerelemente aufgeführt werden sollen (Konstante auf False stellen).

Die Liste wird erstellt, indem Sie die Prozedur ListCommandBarControls ausführen. Die andere Prozedur namens GetCommandBarControl dient zum Durchlaufen der Steuerelemente einer Symbolleiste. Sie gibt die Beschriftungen und Makrozuweisungen der Steuerelemente aus. Diese Prozedur ist rekursiv programmiert, d.h. sie ruft sich selber auf, wenn es notwendig ist. Das ist immer dann der Fall, wenn ein Steuerelement weitere Steuerelemente besitzt, z.B. bei Menüs, Untermenüs sowie bei verschiedenen speziellen Control-Typen wie unter anderem ButtonDropDown, ButtonPopup und SplitButtonPopup.

 

'Deklarationsbereich
Private lngControls As Long
Private Const ONLYCONTROLSWITHMACRO As Boolean = True

Sub ListCommandBarControls()
  Dim objCommandBar As CommandBar
  Dim objControl As CommandBarControl
  Dim objSubControls As CommandBarControls
  Dim wksReportSheet As Worksheet
  Set wksReportSheet = ActiveWorkbook.Worksheets.Add
  With wksReportSheet
    .Range("A3:C3").Value = Array("Symbolleiste", "Steuerelement", "Makro")
    .Range("A3:C3").Font.Bold = True
  End With
  With Application

    .StatusBar = "Verarbeitung läuft. Bitte warten..."
    .ScreenUpdating = False
    .EnableEvents = False
    .Calculation = xlCalculationManual

  End With
  lngControls = 3
  For Each objCommandBar In Application.CommandBars
    lngControls = lngControls + 1
    wksReportSheet.Cells(lngControls, 1).Value = objCommandBar.Name
    If objCommandBar.Controls.Count > 0 Then
      GetCommandBarControl objCommandBar.Controls
    End If
  Next
  With wksReportSheet
    .Columns("A:C").AutoFit
    .Range("A1").Value = "Makros von Symbolleisten-Steuerelementen"
    .Range("A1").Font.Bold = True
    .Range("A1").Font.Size = .Range("A1").Font.Size + 2
  End With
  Set wksReportSheet = Nothing
  With Application

    .Calculation = xlCalculationAutomatic
    .EnableEvents = True
    .ScreenUpdating = True
    .StatusBar = False

  End With
End Sub

Sub GetCommandBarControl(objControls As CommandBarControls)
  Dim objControl As CommandBarControl
  Dim objSubControls As CommandBarControls
  On Error Resume Next
  For Each objControl In objControls
    If lngControls Mod 100 = 0 Then
      Application.StatusBar = "Verarbeite Steuerelement Nr. " & lngControls & "..."
    End If
    If ONLYCONTROLSWITHMACRO = True Then
      Err.Clear
      If objControl.OnAction <> "" Then
        If Err.Number = 0 Then
          lngControls = lngControls + 1
          ActiveSheet.Cells(lngControls, 2).Value = objControl.Caption
          ActiveSheet.Cells(lngControls, 3).Value = objControl.OnAction
        End If
      End If
    Else
      lngControls = lngControls + 1
      ActiveSheet.Cells(lngControls, 2).Value = objControl.Caption
      ActiveSheet.Cells(lngControls, 3).Value = objControl.OnAction
    End If
    Err.Clear
    Set objSubControls = objControl.Controls
    If Err.Number = 0 Then
      If objSubControls.Count > 0 Then
        GetCommandBarControl objSubControls
      End If
    End If
  Next
End Sub

 

 


Wie kann man eine Symbolleiste kopieren?

Es gibt einen Trick, wie man eine beliebige Symbolleiste kopieren kann, ohne gross VBA-Code schreiben zu müssen.

 

Dim bolRC As Boolean

bolRC = Application.ExecuteExcel4Macro("SAVE.TOOLBAR(""Symbolleiste1"",""C:\Symbolleiste.xlb"")")

If bolRC = True Then

  Application.Workbooks.Open "C:\Symbolleiste.xlb"

End If

 

Bei integrierten Symbolleisten muss man den lokalen (d.h. den deutschen) Namen angeben.

Z.B. "Überarbeiten" statt "Reviewing", "Zeichnen" statt "Drawing"

 


Wie kann man eine Symbolleiste eindeutig identifizieren?

Wenn beim Öffnen der Mappe eine benutzerdefinierte Symbolleiste erstellt werden soll, aber bereits eine gleichnamige Symbolleiste vorhanden ist:

- Kann die vorhandene Symbolleiste benutzt werden?

- Darf die vorhandene Symbolleiste gelöscht und dann die neue Symbolleiste erstellt werden?

- Muss die vorhandene Symbolleiste bestehen bleiben und die neue Symbolleiste mit einem anderen Namen erstellt werden?

 

 


Gibt es bekannte Probleme mit Symbolleisten, die an eine Arbeitsmappe angebunden sind?

Ja. Es ist tatsächlich ein Problem bekannt, dass im Zusammenhang mit Symbolleisten auftritt, welche an eine Arbeitsmappe angebunden sind.

Es kann passieren, dass beim Öffnen einer Arbeitsmappe die an die Arbeitsmappendatei angebundene Symbolleiste nicht wie erwartet geladen wird. Wenn die xlb-Datei eine bestimmte Grösse erreicht hat beziehungsweise eine bestimmte Menge Informationen enthält, so steht nicht genügend Speicher zum Laden der in der Mappendatei enthaltenen Symbolleiste zur Verfügung. Als Folge wird die Symbolleiste beim Öffnen der Arbeitsmappe nicht geladen und somit nicht angezeigt, und sie kann auch nicht über das "Anpassen"-Dialogfenster eingeblendet werden.

Anpassen-Dialog in Microsoft Excel
Abbildung: Anpassen-Dialog für Symbolleisten

Für Excel existiert diese Symbolleiste ganz einfach nicht. Verwirrend ist insbesondere, dass im Dialogfenster "Symbolleiste anbinden", welches über die Schaltfläche "Anbinden" des "Anpassen"-Dialogfensters geöffnet wird, die Symbolleiste nicht unter "Symbolleisten der Arbeitsmappe" aufgeführt wird.

Symbolleiste anbinden-Dialog
Abbildung: Symbolleiste anbinden-Dialog

Dass die vermisste Symbolleiste dennoch in der Mappe enthalten ist und von Excel eigentlich auch erkannt wird, kann man feststellen, wenn man die Arbeitsmappe unter einem anderen Dateinamen speichert (Menübefehl Datei/Speichern unter). Die scheinbar nicht existierende beziehungsweise nicht ladbare Symbolleiste wird nämlich korrekt in der neuen Arbeitsmappendatei gespeichert. Einmal abgesehen davon, dass man nicht herausfinden kann, ob die Arbeitsmappe eine angebundene Symbolleiste besitzt, kann man diese auch nicht entfernen, da sie wie oben erwähnt im Dialogfenster "Symbolleiste anbinden" nicht aufgeführt wird.

Dieses Problem lässt sich auch zwei verschiedene Wege lösen:

1. Man stellt der zu öffnenden Arbeitsmappe mehr Speicher zur Verfügung, damit die Mappe inklusive angebundene Symbolleiste korrekt geladen werden kann.

2. Man verkleinert die xlb-Datei, sodass mehr Speicher zur Verfügung steht.

 

 

 


Warum sollte man die xlb-Datei regelmässig defragmentieren?

 

Der nachstehende Programmcode listet alle Steuerelemente der Symbolleisten auf. Bei jedem Steuerelement, welchem ein Makro zugewiesen ist, wird der Name des Makros ausgegeben.

 


 

 

Weitere Informationen über SendKeys erhalten Sie hier:

Weitere Informationen

The eXpLorer: Senden von Tastenbefehlen

Zum Seitenanfang

 


Links und Downloads

Bugs und Probleme

XL2000: Benutzerdefinierte Symbolleiste geht verloren, wenn Arbeitsmappe als Anlage versendet wird
http://support.microsoft.com/default.aspx?scid=kb;de;d43186

XL2000: Änderungen werden nach dem Modifizieren von Symbolleisten nicht gespeichert
http://support.microsoft.com/default.aspx?scid=kb;de;d43184

Zum Seitenanfang

 

Weitere Informationen

OFFICE2000: CommandBar Indexes Different from Office 97
http://www.microsoft.com/?scid=kb;en-us;215149

Zum Seitenanfang

 

Downloads

CommandBar CodeMaker 1.1
Downloadseite

Zum Seitenanfang

WB01727_.gif (1537 Byte)

Haben Sie Fragen, Anregungen oder einen Fehler entdeckt?
Mail senden an philipp_von_wartburg@yahoo.de

Zuletzt aktualisiert am 08.01.2009 / 08:00 Uhr
© 2002-2009 by Philipp von Wartburg, Schweiz
Alle Rechte vorbehalten