Makrozurodnungen verloren
Szenario
Es wurde eine eigene Symbolleiste erstellt und auf ihr wurden Schaltflächen mit eigenen VBA-Makros zugeordnet. Nachdem die Exceldatei außerhalb von Excel umbenannt wurde, enthalten sie Zuordnungen immer noch den Pfad und Name der alten Datei. Dadurch funktioniert das Ganze nicht mehr korrekt.
Ursache
Excel beharrt stur auf eine absolute Zuordnung der Makros zum Dateinamen.
Lösung 1
Die Exceldatei aus Excel heraus unter einem neuen Namen speichern und danach nicht mehr außerhalb von Excel umbenennen!
Lösung 2
- Rechtsklick auf eine beliebige Symbolleiste und im aufgehenden Popupmenu den Punkt Anpassen ... ganz unten wählen
- Rechtsklick auf das gewünschte Icon der benutzerdefinierten Symbolleiste un im aufgehenden Popupmenu den Punkt Makro zuweisen ... gehen
- im aufgehenden Dialog entweder den kompletten Pfad und Dateiname vor dem Makronamen samt Ausrufezeichen (!) löschen oder aber den Makronamen direkt aus der Liste wählen und auf OK klicken
- bei allen Schaltflächen so verfahren
- nach fertiger Zuordnung auf Schließen des Anpassungsdialog klicken -> fertig
Lösung 3
Per VBA die benutzerdefinierte Symbolleiste erzeugen und löschen:
Erzeugen in Workbook_Open()
On Error Resume Next
Application.CommandBars.Add(Name:="Arbeitsbericht", Position:=msoBarTop).Visible = True 'SYMBOLLEISTER ERZEUGEN
Application.CommandBars("Arbeitsbericht").Visible = True 'SYMBOLLEISTE ANZEIGEN
If Application.CommandBars("Arbeitsbericht").Controls.Count = 0 Then 'WENN KEIN CONTROL IN SYMBOLLEISTE IST
Set NewButton = Application.CommandBars("Arbeitsbericht").Controls.Add(Type:=msoControlButton) 'ANALOG ERSTEM BUTTON
With NewButton
.Caption = "Berichts-Assistent ..."
.Style = msoButtonCaption
.OnAction = "berichtswizard"
End With
End if
Löschen in Workbook_BeforeClose(Cancel As Boolean)
On Error Resume Next
'WICHTIG: DAMIT DIE MAKROZUORDNUNGEN ERHALTEN BLEIBEN BEIM UMBENNEN AUßERHALB VON EXCEL,
'MÜSSEN DIE SYMBOLLEISTEN GELÖSCHT WERDEN, NICHT NUR UNSICHTBAR GESCHALTET
Application.CommandBars("Arbeitsbericht").Delete
Hinweis
Das klappt aber nicht, wenn gleichzeitig mehrere Dateien gleichen Aufbaus nzw. Makros geöffnet sind. Dann werden den Schaltflächen immer die Makros der zuletzt geöffneten Datei zugeordnet. In diesem Fall sollte Schaltflächen direkt in die Tabelle, die mit den Makros bedient werden soll, an einer geeigneten Stelle eingefügt werden. Dadurch werden die Makros fest mit der Datei "verdrahtet".