ich habe eine Beispiel-Mappe hochgeladen, mit der ich mein Problem jederzeit nachproduzieren kann.
Die Mappe enthält ein Worksheet mit einem Button über den ein kleines VBA-Script gestartet werden kann. Dieses Script legt ein Worksheet mit einem vorgegebenen Namen an, sollte bereits ein Worksheet mit dem gleichen Namen bestehen, dann wird es vorgängig gelöscht.
Sub Test()
Dim WName As String
WName = "XXX"
Call TabellenBlattErstellen(WName, 2)
Debug.Print "Anzeige 1: Name=" & ActiveSheet.Name & " / Codename=" & ActiveSheet.CodeName
ActiveSheet.Name = WName
Debug.Print "Anzeige 2: Name=" & ActiveSheet.Name & " / Codename=" & ActiveSheet.CodeName
End Sub
Sub TabellenBlattEntfernen(WName As String)
On Error Resume Next
' Löschen eines Tabellenblatts, Name wird übergeben
Application.DisplayAlerts = False
Sheets(WName).Delete
Application.DisplayAlerts = True
End Sub
Sub TabellenBlattErstellen(WName As String, WPosition As Integer)
' Erstellen (inkl. vorgängiges Löschen) eines Tabellenblatts
' Löschen eines eventuell vorhandenen, gleichnamigen Tabellenblatts
TabellenBlattEntfernen (WName)
' Erstellen eines Tabellenblatts, Name und Position werden übergeben
Worksheets.Add After:=Worksheets(WPosition - 1)
End Sub
Rufe ich den VBA-Editor auf und starte von dort aus das Script "Test", dann sieht das Ergebnis der debug-Statements wie folgt aus.Anzeige 1: Name=Tabelle1 / Codename=Tabelle1
Anzeige 2: Name=XXX / Codename=Tabelle1
Genau so würde ich mir die Anzeige auch erwarten. Die Tabelle wird unter dem Namen angelegt, den Excel automatisch vergibt. Der Excel-Interne Namen für die Tabelle ist ebenfalls befüllt. Mit dem im Code sichtbaren Statement gebe ich dem Tabellenblatt einen neuen Namen, der interne Namen bleibt aber gleich.
Nun kommt aber das, was ich nicht verstehe und mir Probleme bereitet.
Wenn ich das Excel öffne und dann in dem dort vorhandenen Arbeitsblatt den Button "Test" drücke, der nichts anderes tut, als die Prozedur Test zu starten, dann sieht das Ergebnis wie folgt aus.
Anzeige 1: Name=Tabelle1 / Codename=
Anzeige 2: Name=XXX / Codename=
Die internen Namen sind nicht befüllt und da ich diese für meine weitere Verarbeitung benötigen würde, habe ich ein Problem.
Das Beispielexcel kann über folgenden Link aufgerufen werden.
https://www.herber.de/bbs/user/148862.xlsm
In der Webversion funktioniert aber der Aufruf-Button nicht, sodass es gespeichert und mit einem lokalen Excel gestartet werden muss. Das gleiche Resultat wie bei der Ausführung durch drücken des Button "Test" würde man auch erhalten, wenn man vom Arbeitsblatt den Button Makros aufruft und von dort aus das Makro Test ausführt.
Hat jemand eine Idee, weshalb sich das so verhält oder was ich tun kann, dass bei diesen Arbeitsblättern auch der interne Name (Codename) gefüllt ist.
Besten Dank für eure Hilfe
Walter