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

Forumthread: Ws.ListObjects anders definieren

Ws.ListObjects anders definieren
04.03.2016 08:19:52
thomas
Hallo Excelfreunde,
ich bekomme schon wieder mal etwas allein nicht gebacken.
Ich habe ein Tabellenblatt in dem der bereich a1:i2000 als Tabelle mit dem Namen TabDaten konvertiert ist.
Nun möchte ich gern diese Konvertierung auflösen. Soweit kein problem,
nur ich bekomme einfach diese zeilen im code nicht abgelösst.
"Dim TabDaten As ListObject"
"Set TabDaten = Ws.ListObjects("Data")"
meine kläglichen versuche sehen zur zeit so aus
Dim bereich As ListObject
bereich = Range("'Tabelle1'!a1:i35")
Set bereich = Ws.ListObjects("Data")
hier bekomme ich leider die Meldung " unzulässige Verwendung einer Eigenschaft
dies hier Set bereich = Range("'Tabelle1'!a1:i35").ListObjects("Data")
möchte auch nicht hier wird die Eigenschaft nicht unterstützt.
hat jemand ein hilfreich rat für mich?
habt recht vielen dank schon mal
liebe grüsse thomas

Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Ws.ListObjects anders definieren
04.03.2016 09:02:50
Luschi
Hallo Thomas,
wenn Du ein neues 'ListObjekt' erstellen willst, dann geht das so:
Dim ws As Worksheet, lstObj As ListObject
Set ws = ThisWorkbook.Worksheets("meineTabelle")
Set lstObj = ActiveSheet.ListObjects.Add(xlSrcRange, ws.Range("$A$1:$I$1000"), , xlYes)
lstObj.Name = "meineDaten"
'weiterer Code
Set lstObj = Nothing
Set ws = Nothing
Gruß von Luschi
aus klein-Paris

Anzeige
irgendwas ist noch foul
04.03.2016 11:17:38
thomas
Hallo Luschi Luschi aus klein-Paris
hab erstmal recht vielen dank das Du dich damit beschäftigst.
Leider muss noch was foul sein. Wenn ich den code das zweite mal ausführe ich bekomme in der Zeile
" Set lstObj = ActiveSheet.ListObjects.Add(xlSrcRange, ws.Range("$A$1:$I$1000"), , xlYes)"
die Meldung " eine Tabelle kann keine Tabelle überlappen" ich habe bestimmt noch was falsch.
mir viel auf das diese Zeile die Tabelle in eine Tabelle konvertiert und dann der Fehler kommt.
Wenn ich den Cod das erstemal starte läuft er durch. Bevor ich ihn das zweite mal starten kann muss ich den bereich erst wieder in eine normale Tabell umwandeln.
kannst du noch mal schauen?
Hab schon mal vielen dank im voraus
liebe grüsse thomas
Dim ws As Worksheet, lstObj As ListObject
Dim meineDaten
Set ws = ThisWorkbook.Worksheets("Tabelle1")
Set lstObj = ActiveSheet.ListObjects.Add(xlSrcRange, ws.Range("$A$1:$I$1000"), , xlYes)
lstObj.Name = "meineDaten"
' Set bereich = Ws.ListObjects("Data")
'Set meineDaten = ws.ListObjects("Data")
'Set ws = Worksheets("Tabelle1")
MaxRow = Tabelle1.Cells(Tabelle1.Rows.Count, 1).End(xlUp).Row

Anzeige
AW: irgendwas ist noch foul
04.03.2016 12:30:38
Luschi
Hallo Thomas,
stelle doch mal ein kleines Musterbeispiel hier rein, damit wir die gleiche Datenbasis haben.
Ich weiß z.Z. nicht, was Du mit 'xlSrcRange' meinst.
Gruß von Luschi
aus klein-Paris

mit beispiel
04.03.2016 13:02:10
thomas
Hallo Luschi aus klein-Paris,
sorry hat ein wenig gedauert ich habe die datei erst mal kräftig abgespeckt ( wegen der grösse).
dein Vorschlag habe ich schon mit drin. Wenn man die tabelle als "normalen Bereich formatiert" startet die datein ein mal.

Die Datei https://www.herber.de/bbs/user/104093.xlsm wurde aus Datenschutzgründen gelöscht


liebe grüsse thomas

Anzeige
super es passt
04.03.2016 15:46:52
thomas
Hallo Luschi aus klein-Paris
es passt jetzt super.
hab vielen dank für deine unterstützung.
und noch ein schönes WE.
liebe grüsse thomas
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Ws.ListObjects anders definieren in Excel VBA


Schritt-für-Schritt-Anleitung

Um mit ListObjects in Excel VBA zu arbeiten, kannst du die folgenden Schritte befolgen:

  1. Deklariere die Variablen: Du benötigst eine Worksheet- und eine ListObject-Variable.

    Dim ws As Worksheet
    Dim lstObj As ListObject
  2. Setze die Arbeitsblatt-Variable: Weise deiner ws-Variable das gewünschte Arbeitsblatt zu.

    Set ws = ThisWorkbook.Worksheets("Tabelle1")
  3. Erstelle ein neues ListObject: Nutze die ListObjects.Add-Methode, um eine Tabelle zu erstellen.

    Set lstObj = ws.ListObjects.Add(xlSrcRange, ws.Range("$A$1:$I$1000"), , xlYes)
  4. Benenne die Tabelle: Weise der Tabelle einen Namen zu.

    lstObj.Name = "meineDaten"
  5. Freigeben der Objekte: Setze die Objekte auf Nothing, um den Speicher freizugeben.

    Set lstObj = Nothing
    Set ws = Nothing

Häufige Fehler und Lösungen

  • Fehler: "Eine Tabelle kann keine andere Tabelle überlappen"
    Dieser Fehler tritt auf, wenn du versuchst, ein ListObject in einem Bereich zu erstellen, der bereits ein ListObject enthält. Stelle sicher, dass der Bereich, in dem du die neue Tabelle erstellen möchtest, nicht bereits von einer anderen Tabelle belegt ist. Du musst die bestehende Tabelle zuerst in einen normalen Bereich umwandeln.

  • Fehler: "Unzulässige Verwendung einer Eigenschaft"
    Dieser Fehler kann auftreten, wenn du versuchst, auf eine Eigenschaft zuzugreifen, die nicht verfügbar ist. Achte darauf, dass du die ListObjects korrekt verwendest und die Variablen richtig deklariert und gesetzt sind.


Alternative Methoden

  1. Verwendung von ActiveSheet: Du kannst auch ActiveSheet verwenden, um auf die ListObjects zuzugreifen.

    Set lstObj = ActiveSheet.ListObjects.Add(xlSrcRange, ActiveSheet.Range("$A$1:$I$1000"), , xlYes)
  2. Anpassung des Quellbereichs: Stelle sicher, dass der Quellbereich, den du angibst, korrekt ist und keine überlappenden Bereiche enthält.


Praktische Beispiele

Hier ist ein einfaches Beispiel, wie du mit ListObjects arbeitest:

Sub BeispielListObject()
    Dim ws As Worksheet
    Dim lstObj As ListObject

    Set ws = ThisWorkbook.Worksheets("Tabelle1")

    ' Überprüfe ob bereits ein ListObject existiert und entferne es
    On Error Resume Next
    ws.ListObjects("meineDaten").Delete
    On Error GoTo 0

    ' Erstelle ein neues ListObject
    Set lstObj = ws.ListObjects.Add(xlSrcRange, ws.Range("$A$1:$I$1000"), , xlYes)
    lstObj.Name = "meineDaten"

    Set lstObj = Nothing
    Set ws = Nothing
End Sub

Tipps für Profis

  • Verwende With-Anweisungen: Du kannst With-Anweisungen verwenden, um den Code zu vereinfachen und lesbarer zu machen:

    With ws.ListObjects.Add(xlSrcRange, ws.Range("$A$1:$I$1000"), , xlYes)
        .Name = "meineDaten"
    End With
  • Fehlerbehandlung: Implementiere eine Fehlerbehandlung, um potenzielle Probleme zu erkennen und zu beheben, bevor sie auftreten.


FAQ: Häufige Fragen

1. Wie kann ich eine bestehende Tabelle in einen normalen Bereich umwandeln?
Du kannst dies tun, indem du mit der rechten Maustaste auf die Tabelle klickst und "In Bereich umwandeln" wählst.

2. Was bedeutet xlSrcRange?
xlSrcRange ist ein Parameter, der angibt, dass der Quellbereich der Tabelle ein Zellbereich ist.

3. Kann ich mehrere ListObjects auf einem Arbeitsblatt erstellen?
Ja, du kannst mehrere ListObjects auf demselben Arbeitsblatt erstellen, solange sie sich nicht überlappen. Achte darauf, dass du jedem ListObject einen eindeutigen Namen gibst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige