Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Tabellenname ermitteln

Tabellenname ermitteln
06.02.2016 17:23:30
Holger
Hallo zusammen,
ich scheitere gerade den Namen einer Tabelle in VBA zu ermitteln.
Normal würde "Tabellenname = Tabelle1.Name" schon funktionieren.
Ich möchte aber über einen selbst erstellten String die Namensabfrage variabel gestalten, ich dachte dabei an folgenden Code, leider funktioniert das aber nicht.
Tabellenname = Worksheets("variabler String").Name
Kann mir hier Bitte jemand helfen?
SG Holger

Anzeige

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Tabellenname ermitteln
06.02.2016 17:25:01
Hajo_Zi
Hallo Holger,
warum so kompliziert?
Tabellenname = "variabler String"

AW: Tabellenname ermitteln
06.02.2016 17:33:30
Holger
Ich habe das anders gemeint.
Es gibt im Excel Arbeitsblatt einen Namen im Register,
dann gibt es für dieses Arbeitblatt einen eigenständign Namen im VBA.
Somit kann man über den VBA-Namen den Registerblattnamen auslesen.
z.B. Tabelle1.Name gibt den Registerblatnamen zurück.
Meine Datei hat über 30 Tabellenblätter mit VBA-Namen, diese könnte ich als String für eine Schleife erzeugen und dann den Registerblattnamen auslesen. z.B. heißt mein String dann Tabelle1 oder Tabelle14.

Anzeige
meinst du das?
06.02.2016 18:22:58
Michael
Hi zusammen,
steck das mal in ein Modul:
Option Explicit
Sub namenAuslesen()
Dim sh As Worksheet
For Each sh In Worksheets
MsgBox "VBA: " & sh.CodeName & " -normal-: " & sh.Name
Next
End Sub
' und / oder:
Sub namenInArray()
Dim shA() As String
Dim sh As Worksheet
Dim i As Long
ReDim shA(Sheets.Count - 1)
i = 0
For Each sh In Worksheets
shA(i) = sh.CodeName
i = i + 1
Next
For i = LBound(shA) To UBound(shA)
MsgBox "i: " & i & " Name: " & shA(i)
Next
End Sub
Schöne Grüße,
Michael

Anzeige
AW: meinst du das?
06.02.2016 18:46:50
Holger
Kommt meinem Problem schon näher,
das Ergenis des ersten Programmabschnitts schaut dann so aus:
VBA: Tabelle7E -normal-: Eccos_7
Ich möchte also über den in einer Schleife selbst generierten Namen Tabelle7E od. Tabelle8E usw.
den normalen Namen ermitteln.
Versucht habe ich das über: Debug.Print sh("Tabelle7E").Name (klappt so aber nicht)
(Tabelle7E wird aber über eine String Variable eingesetzt)
SG Holger

Anzeige
AW: meinst du das?
06.02.2016 18:53:16
Daniel
Hi
dann probiers mal mit dieser Funktion:
Function RegisterName_Wenn_CodeName_Bekannt(CodeName_als_String As String, Optional Datei As  _
Workbook) As String
Dim i As Long
If Datei Is Nothing Then Set Datei = ActiveWorkbook
For i = 1 To Datei.Sheets.Count
If Datei.Sheets(i).CodeName = CodeName_als_String Then
RegisterName_Wenn_CodeName_Bekannt = Datei.Sheets(i).Name
Exit Function
End If
Next
End Function
erster Parameter ist der Codename des gesuchten Blattes als Textstring.
zweiter Parameter die Datei die durchsucht werden soll als Workbook.
wenn du die Datei nicht angibst, verwendet die Funktion die aktive Datei.
aufruf wäre im Prinzip:
Debug.Print  RegisterName_Wenn_CodeName_Bekannt("Tabelle7E", Thisworkbook)
Gruß Daniel

Anzeige
genau, Daniel,
06.02.2016 19:00:10
Michael
so ähnlich hätte ich es auch formuliert...
Der Punkt scheint zu sein, daß kein Zugriff auf das Blatt via Codename möglich ist.
Der Codename ist ja eigentlich auch kein String im Sinne eines Namens, sondern ein Objekt.
siehe auch http://www.cpearson.com/excel/RenameProblems.aspx
CP schreibt: " there is no such proprety that will give you a Worksheet object from a CodeName property."
Schöne Grüße,
Michael

Anzeige
AW: meinst du das?
06.02.2016 19:03:39
Holger
Ja das klappt so! Ich werds mal in Ruhe in mein Projekt integrieren und testen!
Auf jeden Fall schon mal vielen herzlich Dank für die schnelle Hilfe!
Sollte ich noch Fragen habe melde ich mich später nochmal...
Bis dann und SG Holger
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Tabellenname ermitteln in Excel VBA


Schritt-für-Schritt-Anleitung

Um den Tabellenname in Excel VBA zu ermitteln, kannst du folgende Schritte befolgen:

  1. Öffne die Visual Basic for Applications (VBA) Entwicklungsumgebung:

    • Drücke ALT + F11 in Excel.
  2. Füge ein neues Modul hinzu:

    • Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsx)" und wähle Einfügen > Modul.
  3. Füge den folgenden VBA-Code ein:

    Option Explicit
    Sub TabellennamenAuslesen()
       Dim sh As Worksheet
       For Each sh In Worksheets
           MsgBox "VBA: " & sh.CodeName & " - Normal: " & sh.Name
       Next
    End Sub
  4. Führe das Makro aus:

    • Drücke F5 oder gehe zu Run > Run Sub/UserForm.

Mit diesem Code kannst du die VBA-Namen und die normalen Namen der Arbeitsblätter auslesen, was dir bei der Verwendung von excel vba tabellennamen auslesen hilft.


Häufige Fehler und Lösungen

  • Fehler: "Run-time error '9': Index out of range"

    • Lösung: Stelle sicher, dass der Codename des Arbeitsblatts korrekt ist. Überprüfe den Namen in der VBA-Umgebung.
  • Fehler: "Object variable or With block variable not set"

    • Lösung: Überprüfe, ob das Arbeitsblatt existiert und ob du den richtigen Namen oder CodeName verwendest.

Alternative Methoden

Du kannst auch eine Funktion verwenden, um den Tabellennamen anhand des Codenamens zu ermitteln:

Function RegisterName_Wenn_CodeName_Bekannt(CodeName_als_String As String, Optional Datei As Workbook) As String
    Dim i As Long
    If Datei Is Nothing Then Set Datei = ActiveWorkbook
    For i = 1 To Datei.Sheets.Count
        If Datei.Sheets(i).CodeName = CodeName_als_String Then
            RegisterName_Wenn_CodeName_Bekannt = Datei.Sheets(i).Name
            Exit Function
        End If
    Next
End Function

Diese Funktion ermöglicht es dir, den Namen einer Tabelle zu ermitteln, ohne die Arbeitsblätter manuell durchzugehen.


Praktische Beispiele

Angenommen, du hast ein Arbeitsblatt mit dem Codename "Tabelle1" und möchtest dessen Namen auslesen:

Sub BeispielNamenAuslesen()
    Dim tblName As String
    tblName = RegisterName_Wenn_CodeName_Bekannt("Tabelle1")
    MsgBox "Der Tabellenname ist: " & tblName
End Sub

Dieser Code zeigt dir den Namen der Tabelle an, die dem Codename "Tabelle1" zugeordnet ist.


Tipps für Profis

  • Nutze Debug.Print, um Ergebnisse in das Direktfenster auszugeben, anstatt sie in MsgBox anzuzeigen. So kannst du mehrere Ergebnisse gleichzeitig überprüfen.

  • Dokumentiere deine Codenamen in einer separaten Tabelle, um die Übersichtlichkeit bei großen Projekten zu verbessern.

  • Verwende Option Explicit am Anfang deiner Module, um sicherzustellen, dass alle Variablen deklariert sind. Das hilft, Fehler zu vermeiden.


FAQ: Häufige Fragen

1. Wie kann ich alle Tabellennamen in einem Array speichern? Du kannst den folgenden Code verwenden:

Sub NamenInArray()
    Dim shA() As String
    Dim sh As Worksheet
    Dim i As Long
    ReDim shA(Sheets.Count - 1)
    i = 0
    For Each sh In Worksheets
        shA(i) = sh.Name
        i = i + 1
    Next
End Sub

2. Kann ich den Namen eines Arbeitsblatts direkt über den Codename abrufen? Ja, aber du musst sicherstellen, dass du den richtigen Codename verwendest. Der Codename ist kein String, sondern ein Objekt, daher ist der Zugriff über den CodeName notwendig.

3. Welche Excel-Version benötige ich für diese VBA-Funktionen? Die oben genannten VBA-Codes funktionieren in allen aktuellen Excel-Versionen, die die VBA-Programmierung unterstützen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige