title image


Smiley Benutzerdefinierte Symbolleiste dateigebunden verwenden
Hallo!



Du musst im wesentlichen drei Schritte durchführen:



1. Anbinden an gewünschte Arbeitsmappe

Binde die benutzerdefinierte Symbolleiste an die gewünschte Arbeitsmappe. Dazu Extras/Anpassen aufrufen, Symbolleiste auswählen und Anbinden aktivieren. Dort die Symbolleiste der Arbeitsmappe hinzufügen.

Im Ergebnis ist die Symbolleiste nun zweifach vorhanden. Einmal in dem Pool sämtlicher Symbolleisten und zum anderen in der aktiven Arbeitsmappe. In letzterer soll sie ja auch verbleiben, damit sie beim nächsten Öffnen der Datei wieder zur Verfügung steht.

Sie soll allerdings nicht in allen Dateien zur verfügung stehen. Das heisst sie muss aus dem allgemeinen Pool der benutzerdefinierten Symbolleisten wieder raus.

Aber: Mach das nicht von Hand! Dummerweise speichert Excel nämlich in dem Augenblick, in dem Du Deine Arbeitsmappe beim nächsten mal öffnest, die darin gespeicherte Symbolleiste auch wieder im allgeminen Pool der Symbolleisten.

Deshalb ist als weiteres folgendes wichtig:



2. Automatisches Löschen beim Schliessen

Speichere im Codefenster der Arbeitsmappe folgende Prozedur:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Application.CommandBars("test").Delete

End Sub

Im hier vorliegenden Beispiel wird die Symbolleiste test beim Schliessen der Arbeitsmappe wieder - und zwar nur aus dem allgemeinen Pool der Symbolleisten.

Ergebnis:

Beim Öffnen einer anderen Arbeitsmappe taucht dort test nicht auf. Erst wenn Du die besagte Datei wieder öffnest, ist sie wieder da.



3. Automatische Aktualisierung des Makrostandortes

Was tun, wenn diese Datei nun verschoben wird? Oder wenn verschiedene Nutzer im Netz über unterschiedliche Laufwerksmappings drauf zugreifen wollen?

Intern ist in der Eigenschaft onaction bei jedem CommandBarControl gespeichert, wo beim Anklicken nach dem zugehörigen Makro gesucht werden soll. Wenn dabei dann ins Leere gegriffen wird (wegen Verschiebung o.ä.) wars das.

Man kann einiges retten mit der folgenden Prozedur (ebenfalls ins Code-Fenster der Arbeitsmappe):



Private Sub Workbook_Open()

Dim ctl As CommandBarControl

Dim int_Pos As Integer

Dim str_MakroDatei As String

For Each ctl In Application.CommandBars("test").Controls

str_MakroDatei = ctl.OnAction

'MsgBox str_MakroDatei

int_Pos = InStr(str_MakroDatei, "!")

If int_Pos > 0 Then

str_MakroDatei = Mid(str_MakroDatei, int_Pos + 1)

ctl.OnAction = str_MakroDatei

End If

Next

End Sub



Hiermit werden die Zuordnungen zu Makros darauf untersucht, ob sie aus der aktuellen Arbeitsmappe zu stammen scheinen. Hängt davon ab, ob - unabhängig vom Pfad - der Name der Arbeitsmappe zutrifft. Wenn ja, wird die Zuordnung einfach nochmals - diesmal ohne Pfad - erneuert und dabei sogleich auf die aktuelle Arbeitsmappe verbogen.

Ergebnis:

Eine Zuordnung, die z.B. nach einer Verschiebung noch am alten Standort nach dem Makro suchen würde, findet dieses nun am neuen Standort.



Gruß

Manes
Ob ich Spotlight gut finde? Also wenn ich ehrlich sein soll, müsste ich lügen!

geschrieben von

Login

E-Mail:
  

Passwort:
  

Beitrag anfügen

Symbol:
 
 
 
 
 
 
 
 
 
 
 
 
 

Überschrift: