| Symbolleisten und die xlb-Datei von Microsoft Excel | Home |
![]()
| 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 |
![]()
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
Allgemeines über Symbolleisten
...
Nachfolgend finden Sie viele interessante Informationen über die xlb-Datei von Microsoft Excel.
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) |
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.

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.

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.

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.

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.

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 |
|
|
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 |
|
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.
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:
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.

Abbildung: Anpassen-Dialog von Microsoft Excel
Wenn Sie auf die Schaltfläche "Anbinden" klicken, erscheint das "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?
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:
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.

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.

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 |
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
OFFICE2000: CommandBar Indexes Different from Office
97
http://www.microsoft.com/?scid=kb;en-us;215149
CommandBar CodeMaker 1.1
Downloadseite
![]()
Zuletzt aktualisiert am 08.01.2009
/ 08:00 Uhr
© 2002-2009 by Philipp von Wartburg, Schweiz
Alle Rechte vorbehalten