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

Bezug auf internen Tabellennamen

Forumthread: Bezug auf internen Tabellennamen

Bezug auf internen Tabellennamen
Daniel
Guten morgen zusammen,
wie kann ich Bezug auf den internen Tabellennamen eines anderen Workbooks nehmen?
Bsp: ....=Workbooks.Worksheets("Tabelle1").Cells.... funktioniert!!
....=Workbooks.internTabelle1.Cells funktioniert nicht!! ("internTabelle1" ist der interne Tabellenname
von Tabelle1)
Vielen Dank und Grüße
Daniel
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 08:35:51
JogyB
Hallo Daniel,
einfach internTabelle1.Cells wenn es im selben Workbook wie der Code ist bzw.
Workbooks("Dateiname_ohne_Pfad_aber_mit_Endung").internTabelle1.Cells
wenn es in einer anderen Arbeitsmappe ist.
Gruß, Jogy
AW: Bezug auf internen Tabellennamen
01.10.2010 08:44:25
Daniel
Hallo Jogy,
Danke für deine Antwort!
Ist Workbooks("Dateiname_ohne_Pfad_aber_mit_Endung").internTabelle1.Cells getestet? Bei mir kommt Laufzeitfehler 438 "Objekt untersützt Methode nicht..."
Gruß
Daniel
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 09:04:59
Nepumuk
Hallo Daniel,
im Prinzip nur so:
Public Sub Test()
    Dim objSheet As Worksheet
    Dim blnFound As Boolean
    For Each objSheet In Workbooks(1).Worksheets
        If objSheet.CodeName = "Tabelle1" Then
            blnFound = True
            Exit For
        End If
    Next
    If blnFound Then
        objSheet.Cells(1, 1).Value = "ABC"
    Else
        MsgBox "Tabelle1 nicht gefunden"
    End If
End Sub

Grund: Die Tabelle1 in der anderen Mappe als Objekt ist kein Bestandteil des Projektes in dem sich der Code befindet. Sie ist eine Eigenschaft der Workbook-Eigenschaft und kann nur über deren Item-Eigenschaft angesprochen werden. Diese erwartet aber nicht den Objektnamen, sondern die Index-Nummer oder den Excel-Namen.
Gruß
Nepumuk
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 09:23:18
Daniel
Hallo Nepumuk,
sowas hab ich mir schon fast gedacht :-)
Kann ich den Tabellenblattindex fest vergeben oder hat das erste Tabellenblatt automatisch Index=1?
Wie mache ich die Zuweisung per Indexnummer, also z.B. Workbooks(...).Worksheets.Index(1)....
Danke und Grüße
Daniel
AW: Bezug auf internen Tabellennamen
01.10.2010 09:34:33
Nepumuk
Hallo Daniel,
die Indexnummern werden von Excel automatisch vergeben. Wobei die Sheets-Eigenschaft und die Worksheets-Eigenschaft unabhängige Nummern vergeben. Ist das erst Blatt in der Mappe ein Chart und das zweite Blatt eine Tabelle, hat das Chart in der Sheets-Auflistung die Nummer 1 die Tabelle die Nummer 2. In der Worksheets-Auflistung wird das Chart nicht aufgeführt und die Tabelle hat die Index-Nummer 1.
Gruß
Nepumuk
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 09:53:41
JogyB
Hallo Daniel,
es geht schon, allerdings verdammt umständlich
With Workbooks(DATEINAME)
.Sheets(.VBProject.VBComponents("ta"). _
Properties(7).Value).Cells(1, 1) = Now
End With

Gruß, Jogy
AW: Bezug auf internen Tabellennamen
01.10.2010 10:06:42
Nepumuk
Hallo Jogy,
ABER der Zugriff auf das VBA-Projekt muss erlaubt sein plus das Projekt darf nicht geschützt sein. Also in der Praxis doch wenig realistisch und nur für den privaten Gebrauch tauglich.
Gruß
Nepumuk
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 10:12:15
JogyB
Hallo Nepumuk,
da hast Du natürlich recht... wäre jetzt auch nicht die Methode, die ich verwenden würde.
Und das mit dem Zugriff auf das VBA-Projekt übersehe ich immer, weil ich es bei mir eben schon erlaubt ist.
Gruß, Jogy
AW: Bezug auf internen Tabellennamen
01.10.2010 09:33:38
JogyB
Hallo Daniel,
mein Fehler, hatte ich jetzt nicht getestet. Von der Logik her hätte es funktionieren sollen, aber Microsoft scheint da das Objektmodell nicht ganz konsequent durchzuziehen.
Gruß, Jogy
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 09:46:26
Nepumuk
Hallo Jogy,
das Objektmodell ist konsequent. Die Tabellen sind eine Eigenschaft des Workbook-Objektes. Es gibt kein Objekt welches auf der obersten Ebene dynamisch, je nach Anzahl der Tabellen, mal eine mal einhundert Eigenschaften hat. Das können nur Auflistungsobjekte und die können fühestens in der zweiten Ebene eines Objektes erscheinen.
Überleg doch mal. Du hast eine Klasse Workbook. Diese soll eine Klasse Worksheet enthalten. Wie soll das dynamisch gehen? Bei jedem hinzufügen / löschen einer Tabelle den Code ändern um ein neues Objekt mehr oder weniger in der Klasse zu haben? Also muss die Klasse Worksheets eine eigene Klasse sein und in der Klasse Workbooks hast du ein dynamisches Array mit den Verweisen auf die Worksheets-Klassen.
Gruß
Nepumuk
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 10:04:35
JogyB
Hallo Nepumuk,
und wie wird das dann bei den UserForms gemacht?
Ich kann dort jedes Control mit UserForm.Name und UserForm.Controls("Name") ansprechen. Das war die Analogie, an die ich gedacht habe - ich bin kein Informatiker, deswegen sind mir hier vielleicht manche Feinheiten nicht so richtig bewusst.
Gruß, Jogy
Anzeige
AW: Bezug auf internen Tabellennamen
01.10.2010 10:22:36
Nepumuk
Hallo Jogy,
UserForm.ControlName
gilt aber nur für Controls die im Entwurfsmodus hinzugefügt wurde. Zur Laufzeit hinzugefügte Controls können auch nur über die Item-Eigenschaft des Controls-Auflistungsobjektes angesprochen werden.
Das Objekt Userform erst durch das Laden interpretiert und da sind die im Entwurfsmodus eingefügten Controls schon ein fester Bestandteil des Objektes. Diese kannst du auch nicht per Remove zur Laufzeit löschen.
Gruß
Nepumuk
Anzeige
Danke - owT
01.10.2010 10:32:27
JogyB
;
Anzeige

Infobox / Tutorial

Bezug auf internen Tabellennamen in Excel


Schritt-für-Schritt-Anleitung

Um auf den internen Tabellennamen einer anderen Arbeitsmappe zuzugreifen, kannst du den folgenden VBA-Code verwenden. Stelle sicher, dass du den Dateinamen und den internen Tabellennamen korrekt angibst.

Sub ZugriffAufInterneTabelle()
    Dim objSheet As Worksheet
    Dim wb As Workbook
    Set wb = Workbooks("Dateiname_ohne_Pfad_aber_mit_Endung") ' Ersetze durch deinen Dateinamen

    ' Zugriff auf das Arbeitsblatt mit dem internen Namen
    Set objSheet = wb.Worksheets("Tabelle1") ' Ersetze "Tabelle1" durch deinen internen Tabellennamen
    objSheet.Cells(1, 1).Value = "Hallo Welt" ' Beispiel für eine Zuweisung
End Sub

Wenn du auf die interne Tabelle zugreifen möchtest, während du dich in einem anderen Workbook befindest, benutze den folgenden Befehl:

Workbooks("Dateiname_ohne_Pfad_aber_mit_Endung").internTabelle1.Cells(1, 1).Value = "Test"

Häufige Fehler und Lösungen

  • Laufzeitfehler 438: Dieser Fehler tritt auf, wenn die Methode oder das Objekt nicht unterstützt wird. Stelle sicher, dass du den richtigen internen Tabellennamen verwendest und dass das Objekt existiert.

  • Index-Fehler: Wenn du versuchst, auf eine Tabelle per Index zuzugreifen, und die Tabelle nicht existiert, kann dies ebenfalls zu Fehlern führen. Verwende Worksheets(Index) und achte darauf, dass der Index korrekt ist.


Alternative Methoden

Eine alternative Methode zum Zugriff auf interne Tabellennamen ist die Verwendung der CodeName-Eigenschaft, die stabiler ist und keine Abhängigkeit von den Sichtbaren Namen hat:

Sub ZugriffMitCodeName()
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Tabelle1 ' Hier "Tabelle1" ist der CodeName
    ws.Cells(1, 1).Value = "Hallo"
End Sub

Diese Methode funktioniert nur, wenn das Arbeitsblatt im selben Projekt ist.


Praktische Beispiele

Hier sind einige praktische Beispiele für den Zugriff auf interne Tabellennamen:

  1. Wert in Zelle setzen:

    Workbooks("DeineDatei.xlsx").internTabelle1.Cells(1, 1).Value = "Beispieltext"
  2. Wert aus Zelle lesen:

    Dim wert As String
    wert = Workbooks("DeineDatei.xlsx").internTabelle1.Cells(1, 1).Value
    MsgBox wert
  3. Durch alle Arbeitsblätter iterieren:

    Dim ws As Worksheet
    For Each ws In Workbooks("DeineDatei.xlsx").Worksheets
       MsgBox ws.Name
    Next ws

Tipps für Profis

  • Verwende CodeNames: Wenn möglich, arbeite mit CodeNames, da diese nicht von Änderungen der Arbeitsblattnamen betroffen sind.
  • Fehlerbehandlung einfügen: Um Laufzeitfehler zu vermeiden, füge eine Fehlerbehandlung in deinen Code ein, um sicherzustellen, dass das Programm nicht abstürzt.
  • Benutze Option Explicit: Dies zwingt dich, alle Variablen zu deklarieren, was die Fehlersuche erleichtert.

FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen CodeName und Sichtbarem Namen in Excel?
Der CodeName ist in der VBA-Umgebung festgelegt, während der sichtbare Name im Excel-Blatt angezeigt wird. Der CodeName bleibt konstant, auch wenn du den sichtbaren Namen änderst.

2. Wie finde ich den internen Tabellennamen?
Du kannst den internen Tabellennamen in der VBA-Umgebung im Projekt-Explorer sehen. Er wird neben dem Arbeitsblatt angezeigt und ist in der Regel als "Tabelle1", "Tabelle2" usw. bezeichnet, es sei denn, du hast ihn manuell geändert.

3. Kann ich den internen Tabellennamen ändern?
Ja, du kannst den internen Namen eines Arbeitsblatts in der VBA-Entwicklungsumgebung ändern, indem du mit der rechten Maustaste auf das Arbeitsblatt klickst und die Eigenschaften bearbeitest.

4. Was mache ich, wenn ich den internen Tabellennamen nicht finde?
Wenn du den internen Tabellennamen nicht finden kannst, überprüfe, ob du die richtige Arbeitsmappe geöffnet hast und ob das Arbeitsblatt vorhanden ist.

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