Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Automatisierte Namens Abfrage eines ListObjects

Automatisierte Namens Abfrage eines ListObjects
14.10.2014 16:15:27
Sebastian
Hallo zusammen!
Meine Forensuche war leider recht erfolglos, darum hoffe ich nun hier auf kompetente Hilfe.
Zu meinem Problem: Ich habe ein Makro geschrieben welches innerhalb der Arbeitsmappe ein _ Arbeitsblatt kopiert und dieses anschließend bearbeiten soll. Die Tabelle, wie sie auf dem Ausgangs-Arbeitsblatt bereits formatiert ist soll um 3 Spalten erweitert werden. Hierzu bietet sich nach meiner Recherche folgender Code an:

Worksheets("Test").ListObjects("Tabelle123").Resize Range("$B$3:$M$231")

Allerdings scheitert es aktuell an dem Name des ListObjects (Tabelle123). Bei jeder Aktualisierung des Arbeitsblattes (löschen des vorhandenen und erneut kopieren) wird der Name geändert.
Zur Frage: Gibt es eine möglichkeit automatisiert den Namen entweder:
-abzufragen (es gibt lediglich ein LostObject)
-beim Kopieren festzulegen oder
-das Problem eleganter zu lösen?
Beste Grüße und vorab shconmal vielen Dank!
Sebastian

Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Automatisierte Namens Abfrage eines ListObjects
14.10.2014 18:46:46
Luschi
Hallo Sebastian
mach es so:

Sub testListObjekt()
Dim lstObj As ListObject
On Error Resume Next
Set lstObj = Worksheets("Test").ListObjects(1)
On Error GoTo 0
If lstObj Is Nothing Then
MsgBox "kein ListObjekt gefunden!", 16
Exit Sub
End If
MsgBox "juchhu - Name des ListObjekts: " & lstObj.Name, 48
'usw.
End Sub
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Automatisierte Namens Abfrage eines ListObjects
15.10.2014 09:57:27
Sebastian
Servus Luschi,
es funktioniert, vielen Dank!
Jedoch hätte ich noch eine kleine Frage:
Was wird in dem folgenden Block gemacht?
On Error Resume Next
Set lstObj = Worksheets("Test").ListObjects(1)
On Error GoTo 0
Hier wird salop formuliert doch nichts anderes genacht als eine Schleife mit aufsteigender ID des ListObjects bis das erste "fehlerfreie" - sprich existende gefunden wird, oder?
Ach und welche Funktion haben die Zahlen 16 und 48 am Ende der MsgBox?
Beste Grüße,
Sebastian

Anzeige
AW: Automatisierte Namens Abfrage eines ListObjects
15.10.2014 15:40:12
Luschi
Hallo Sebastian,
mit dem Befehl 'Set lstObj = Worksheets("Test").ListObjects(1)' wird das erste existierende/erzeugte ListObject einer Objekt-Variablen zugewiesen. Das klappt aber nur, wenn es auch wirklich mindestens 1 Listobjekt gibt. Gibt es keins, dann würde dieser Befehl einen Vba-Fehler erzeugen.
Um das zu verhindert, verwendet man den darüberliegenden Befehl 'On Error Resume Next'. Dann verweist die Variable aber nicht auf das vorhandene Listobjekt, sondern besitzt den undefinierten Zustand 'Nothing', was man übersetzen könnte mit 'Leider nicht vorhanden'.
Gibt es mehr als 1 Listobjekt, dann werden diese durch Vba intern durchnummeriert durch einen Index entsprechend der Entstehungsreihenfolge beginnend bei 1. Andere Auflistungen können auch bei 0 anfangen.
Gruß von Luschi
aus klein-Paris

Anzeige
AW: Automatisierte Namens Abfrage eines ListObjects
15.10.2014 16:36:45
Sebastian
Hallo Luschi,
danke für diese ausführliche und aufklärende Antwort! Damit kann ich arbeiten.
Besten Gruß,
Sebsatian
;
Anzeige
Anzeige

Infobox / Tutorial

Automatisierte Namensabfrage eines ListObjects in Excel


Schritt-für-Schritt-Anleitung

Um automatisch den Namen eines ListObject in Excel abzufragen, kannst du den folgenden VBA-Code verwenden. Dieser Ansatz ist besonders nützlich, wenn du in deiner Tabelle mehrere ListObjects hast und nur das erste ListObject ansprechen möchtest:

Sub testListObjekt()
    Dim lstObj As ListObject
    On Error Resume Next
    Set lstObj = Worksheets("Test").ListObjects(1)
    On Error GoTo 0
    If lstObj Is Nothing Then
        MsgBox "kein ListObjekt gefunden!", 16
        Exit Sub
    End If
    MsgBox "juchhu - Name des ListObjekts: " & lstObj.Name, 48
End Sub

Dieser Code fragt das erste ListObject auf dem Arbeitsblatt "Test" ab. Du kannst die Zeile Set lstObj = Worksheets("Test").ListObjects(1) anpassen, um auf andere ListObjects zuzugreifen.


Häufige Fehler und Lösungen

  1. Kein ListObject gefunden

    • Problem: Wenn du eine Fehlermeldung erhältst, dass kein ListObject vorhanden ist.
    • Lösung: Stelle sicher, dass das Arbeitsblatt "Test" tatsächlich ein ListObject enthält. Überprüfe auch den Namen des Arbeitsblatts.
  2. Fehler bei der Namenszuweisung

    • Problem: Der Code gibt einen Fehler zurück, weil das ListObject nicht existiert.
    • Lösung: Der Befehl On Error Resume Next ignoriert Fehler, aber du solltest sicherstellen, dass du die Fehlerbehandlung wieder aktivierst.

Alternative Methoden

Wenn du keine feste Zellreferenz für das ListObject verwenden möchtest, kannst du auch eine Schleife verwenden, um durch alle ListObjects auf einem Arbeitsblatt zu iterieren:

Sub ListAllNames()
    Dim lstObj As ListObject
    Dim names As String
    For Each lstObj In Worksheets("Test").ListObjects
        names = names & lstObj.Name & vbCrLf
    Next lstObj
    MsgBox names
End Sub

Diese Methode listet alle ListObjects auf dem Arbeitsblatt "Test" auf.


Praktische Beispiele

  1. Erweiterung eines ListObjects: Um ein ListObject automatisch um Spalten zu erweitern, kannst du den folgenden Code verwenden:

    Worksheets("Test").ListObjects(1).Resize Range("$B$3:$M$231")

    Dies setzt voraus, dass du bereits das erste ListObject erfolgreich abgefragt hast.

  2. Fehlerbehandlung beim Zugriff auf ListObjects: Verwende den Code zur Fehlerbehandlung, um sicherzustellen, dass du nicht versuchst, auf ein nicht vorhandenes ListObject zuzugreifen.


Tipps für Profis

  • Nutze activesheet.listobjects anstelle einer festen Arbeitsblattanweisung, wenn du flexibel auf das aktive Blatt zugreifen möchtest.
  • Verwende ListObjects.Count, um die Anzahl der ListObjects auf einem Blatt zu überprüfen, bevor du versuchst, darauf zuzugreifen.
  • Experimentiere mit On Error GoTo für eine detailliertere Fehlerbehandlung anstelle von On Error Resume Next.

FAQ: Häufige Fragen

1. Wie kann ich den Namen des ersten ListObjects direkt abfragen?
Du kannst den folgenden Code verwenden, um den Namen direkt abzurufen:

MsgBox Worksheets("Test").ListObjects(1).Name

2. Was bedeutet On Error Resume Next im Code?
Dieser Befehl ignoriert Fehler und fährt mit dem nächsten Befehl fort. Das ist nützlich, wenn du sicherstellen möchtest, dass dein Code nicht stoppt, wenn ein ListObject nicht gefunden wird.

3. Wie kann ich alle ListObjects auf einem Arbeitsblatt auflisten?
Verwende eine Schleife mit For Each, um alle ListObjects zu durchlaufen und ihre Namen zu speichern oder anzuzeigen.

4. Was sind die Vorteile der Verwendung von ListObjects in Excel?
ListObjects bieten eine strukturierte Möglichkeit, Daten in Tabellenform zu verwalten, und erleichtern das Arbeiten mit Daten, insbesondere in VBA.

5. Funktionieren diese Codes in allen Excel-Versionen?
Ja, die meisten dieser VBA-Codes sind in Excel 2010 und neueren Versionen anwendbar.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige