Excel: CodeName von Tabellenblättern ändern und wozu das gut ist

Zeigt die Standard-Code-Namen einer Excel-Mappe
Bild 1

Will man in einem Excel-VBA-Projekt per Programm auf bestimmte Tabellenblätter zugreifen, so eignet sich dazu hervorragend die Eigenschaft CodeName eines Blattes

(siehe Bild 1).

 

Diese  Eigenschaft

  • wird von Excel vergeben,
  • folgt dem Muster "Tabelle1", "Tabelle2" usw. und
  • kann von einem Anwender nicht geändert werden.

Benutzt der Entwickler den CodeName für den Zugriff auf ein Tabellenblatt, so kann der Anwender also den Namen des Blattes nach Belieben ändern, ohne die VBA-Anwendung dadurch in Schwierigkeiten zu bringen. Die Excel-Mappe muss nicht gesperrt werden.

Zeigt ein Beipiel für geänderte Code-Namen in einer Excel-Mappe
Bild 2

Für den Entwicker wäre es allerdings wünschenswert, dass der CodeName erkennen lässt, welche Funktion das Tabellenblatt in der Anwendung hat (siehe Bild 2).

 

 

Im Folgenden zeige ich,

  • wie die Eigenschaft CodeName per VBA geändert werden kann und
  • das Tabellenblatt mit einem bestimmten CodeName per VBA angesprochen wird.

Voraussetzung für die Lösung ist, dass im Trust Center von Excel für die Änderung des CodeName vorübergehend das Vertrauen zum VBA-Projekt hergestellt wird (siehe Bild 3).

 

Zeigt die Einstellung im Trust Center, die nötig ist
Bild 3

Die folgende Prozedur ändert die CodeName-Eigenschaft der Tabellenblätter.

Hinweis: CodeNames müssen mit einem Buchstaben beginnen.

 

Sub Change_CodeName()
  With ThisWorkbook.VBProject
    .VBComponents("Tabelle1").Properties("_CodeName").Value = "Dashboard"
    .VBComponents("Tabelle2").Properties("_CodeName").Value = "Datenbank"
    .VBComponents("Tabelle3").Properties("_CodeName").Value = "Auswertung"
  End With
End Sub

 

Um das Tabellenblatt mit einem speziellen CodeName im Programmcode anzusprechen, hilft die folgende Funktion.

Function Get_Dashboard() As Worksheet
  Dim wks As Worksheet
  Set Get_Dashboard = Nothing
  For Each wks In ThisWorkbook.Worksheets
    If wks.CodeName = "Dashboard" Then
      Set Get_Dashboard = wks
      Exit For
    End If
  Next wks
  Set wks = Nothing
End Function

Das Aktivieren des Dashboard-Tabellenblatts realisiert dann zum Beispiel diese Prozedur.

Sub Activate_Dashboard()
  Get_Dashboard.Activate
End Sub

Download
Diese Beispiellösung zum Herunterladen
Beispiel_CodeName.xlsm
xlsm File 20.4 KB
Kommentare: 2
  • #2

    Sabine Konschak (Montag, 20 September 2021 13:40)

    Hallo Jürgen,
    den Code dieses Blogs habe ich gerade noch einmal geprüft. Alles i.O! Den Laufzeitfehler 9 konnte ich allerdings provozieren, wenn ich in der Prozedur "Change_CodeName" einen Tabellennamen verwendet habe, den es in der Mappe nicht gibt, also zum Beispiel "Tabelle 1" statt "Tabelle1".

  • #1

    Jürgen Michels (Montag, 20 September 2021 11:13)

    Das funktioniert bei mir leider nicht, ich bekomme den Laufzeitfehler 9 :"Index außerhalb des gültigen Bereichs"