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

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