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

Forumthread: VBA und dynamische Tabellen

VBA und dynamische Tabellen
30.08.2021 08:17:49
BuddyHoli
Hallo Excel-Community,
Ich habe eine Arbeitsmappe TEMPLATE mit 20 Arbeitsblättern. Jedes Arbeitsblatt enthält eine dynamische Tabelle.
Ich habe zudem 5 baugleiche Arbeitsmappen PART01 - PART05 mit den gleichen 20 Arbeitsblättern. Sie enthalten ebenfalls pro Arbeitsblatt eine dynamische Tabelle.
Meine Aufgabe:
- Alle dynamischen Tabellen der Arbeitsmappe TEMPLATE leeren
- Die Inhalte der Arbeitsblätter der 5 Arbeitsmappen PART01 bis PART05 in die jeweiligen Tabellen der Arbeitsblätter der Arbeitsmappe TEMPLATE kopieren.
Es geht mir hierbei nicht um die Technik zum Öffnen/Schließen der Arbeitsmappen, sondern einzig um den Umgang mit den dynamischen Tabellen.
Möchte ich beispielsweise die Tabellen in der Arbeitsmappe TEMPLATE leeren, würde ich bei "normalen" Tabellen so verfahren:

For cleanupStep = 0 To 19
curLastCol = Workbooks(theTemplate).Worksheets(wsName(cleanupStep)).Cells(2, 256).End(xlToLeft).Column
curLastRow = Workbooks(theTemplate).Worksheets(wsName(cleanupStep)).Cells(Rows.Count, 1).End(xlUp).Row
Workbooks(theTemplate).Worksheets(wsName(cleanupStep)).Range(Cells(2, 1), Cells(curLastRow, curLastCol)).ClearFormats
Workbooks(theTemplate).Worksheets(wsName(cleanupStep)).Range(Cells(2, 1), Cells(curLastRow, curLastCol)).ClearContents
Next cleanupStep
Problem 1: Nur die Tabelle des ersten Arbeitsplattes wird geleert. Danach Laufzeitfehler.
Ich habe auch schon versucht, einfach nur die Rows zu löschen, was zwar funktioniert, aber irgendwie nicht die Lösung sein soll.
Problem 2: Es bleibt beim Löschen der Rows immer eine Zeile der dynamischen Tabelle über.
Aufgrund des Abbruchs nach Arbeitsblatt 1 der Arbeitsmappe TEMPLATE bin ich noch nicht beim Kopieren der Daten aus Part01-Part05.
Ich denke, ich muss erstmal verstehen, wie man via VBA mit den dynamischen Tabellen umgehen muss.
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA und dynamische Tabellen
30.08.2021 08:37:51
PawelPopolski
Moin,
nur mal so als Denkanstoss:
Alle Datensätze in einer Tabelle löschst du so

Public Sub deleteTable()
ActiveSheet.ListObjects("tabelle1").DataBodyRange.Delete
End Sub

AW: VBA und dynamische Tabellen
30.08.2021 09:09:37
BuddyHoli
Das ist schonmal super.
Aber was, wenn ich den Namen der dynamischen Tabelle zum Programmstart noch nicht kenne?
Kann ich irgendwie via Schleife alle dynamischen Tabellen aller Tabellenblätter leeren?
Anzeige
AW: VBA und dynamische Tabellen
30.08.2021 09:23:55
hary
Moin
Wenn der Listobj. Name unbekannt und evtl. mehrere Listobj.
Probier mal.

Dim i As Long
With ActiveSheet
If .ListObjects.Count = 0 Then Exit Sub '--wenn kein Listobj.
For i = 1 To .ListObjects.Count '--auch wenn mehrere Listobj.
.ListObjects(i).DataBodyRange.ClearContents
Next
End With
gruss hary
Anzeige
AW: VBA und dynamische Tabellen
30.08.2021 09:55:31
BuddyHoli
Ergibt
Laufzeitfehler "91"
Objektvariable oder With-Blockvariable nicht festgelegt
AW: VBA und dynamische Tabellen
30.08.2021 10:05:59
PawelPopolski
Hallo,
.clearcontents ist hier eher kontraproduktiv, da nur die Inhalte, niocht aber die Zeilen gelöscht werden - und wer will schon x leere Zeilen in seiner Tabelle haben.
.delete passt besser.
Anzeige
AW: VBA und dynamische Tabellen
30.08.2021 10:06:19
Pierre
Füg mal ein "End If" vor dem Next ein...manchmal hilft das.
Gruß Pierre
AW: VBA und dynamische Tabellen
30.08.2021 10:08:24
PawelPopolski
Evtl hast du versehentlich das with active sheet oder das end with gelöscht?
AW: VBA und dynamische Tabellen
30.08.2021 09:39:33
PawelPopolski

Sub AlleListobjects()
Dim tbl As ListObject
For Each tbl In ActiveSheet.ListObjects
Debug.Print tbl.Name
Next tbl
End Sub


Sub AlleListobjectsInAllenWS()
Dim tbl As ListObject
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
For Each tbl In ws.ListObjects
Debug.Print tbl.Name
Next tbl
Next ws
End Sub

Anzeige
AW: VBA und dynamische Tabellen
30.08.2021 08:40:46
PawelPopolski
Hier (https://www.thespreadsheetguru.com/blog/2014/6/20/the-vba-guide-to-listobject-excel-tables) findest du übrigens eine umfassende Übersicht zu listobjects in VBA,
AW: VBA und dynamische Tabellen
30.08.2021 09:32:34
GerdL
Moin

Sub Unit()
Dim Blatt As Worksheet, LB As ListObject
For Each Blatt In ActiveWorkbook.Worksheets
For Each LB In Blatt.ListObjects
MsgBox "Worksheet: " & Blatt.Name
MsgBox "Listbox: " & LB.Name
Next
Next
End Sub
Gruß Gerd
Anzeige
;

Forumthreads zu verwandten Themen

Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

VBA und dynamische Tabellen in Excel nutzen


Schritt-für-Schritt-Anleitung

  1. Dynamische Tabelle leeren: Um alle Daten in einer dynamischen Tabelle zu löschen, kannst du den folgenden VBA-Code verwenden. Stelle sicher, dass du den Namen der Tabelle kennst oder den Code entsprechend anpasst, um auf die Tabelle zuzugreifen.

    Public Sub deleteTable()
       ActiveSheet.ListObjects("tabelle1").DataBodyRange.Delete
    End Sub
  2. Dynamische Tabelle in allen Arbeitsblättern leeren: Falls du den Namen der dynamischen Tabellen nicht kennst, kannst du mit einer Schleife durch alle Tabellenblätter iterieren und die Inhalte der dynamischen Tabellen leeren.

    Dim i As Long
    With ActiveSheet
       If .ListObjects.Count = 0 Then Exit Sub '--wenn kein Listobj.
       For i = 1 To .ListObjects.Count '--auch wenn mehrere Listobj.
           .ListObjects(i).DataBodyRange.Delete
       Next
    End With
  3. Daten aus anderen Arbeitsmappen kopieren: Um Daten aus mehreren Arbeitsmappen zu kopieren, musst du sicherstellen, dass du die jeweiligen Arbeitsblätter korrekt referenzierst.


Häufige Fehler und Lösungen

  • Laufzeitfehler "91": Dieser Fehler tritt häufig auf, wenn die Objektvariable nicht korrekt gesetzt ist. Achte darauf, dass der With-Block korrekt geschlossen wird und dass die Tabellenblätter vorhanden sind.

  • Leere Zeilen in der Tabelle: Wenn du .ClearContents verwendest, bleiben leere Zeilen in der dynamischen Tabelle zurück. Nutze stattdessen .Delete, um die Zeilen tatsächlich zu entfernen.


Alternative Methoden

  • Dynamische Tabelle erstellen in Excel: Um eine neue dynamische Tabelle zu erstellen, markiere die Daten und gehe zu "Einfügen" > "Tabelle". Stelle sicher, dass die Option "Meine Tabelle hat Überschriften" aktiviert ist, wenn deine Daten Überschriften haben.

  • Dynamische Tabelle im VBA ansprechen: Du kannst auch alle ListObjects in einem Arbeitsblatt auflisten und deren Namen ausgeben, um sie besser zu verwalten.

    Sub AlleListobjects()
       Dim tbl As ListObject
       For Each tbl In ActiveSheet.ListObjects
           Debug.Print tbl.Name
       Next tbl
    End Sub

Praktische Beispiele

  • Alle dynamischen Tabellen in einer Arbeitsmappe leeren:

    Sub AlleListobjectsInAllenWS()
       Dim tbl As ListObject
       Dim ws As Worksheet
       For Each ws In ActiveWorkbook.Worksheets
           For Each tbl In ws.ListObjects
               tbl.DataBodyRange.Delete
           Next tbl
       Next ws
    End Sub
  • Meldungen für jede Tabelle anzeigen: Um eine Rückmeldung über die bearbeiteten Tabellen zu erhalten, kannst du MsgBox verwenden:

    Sub Unit()
       Dim Blatt As Worksheet, LB As ListObject
       For Each Blatt In ActiveWorkbook.Worksheets
           For Each LB In Blatt.ListObjects
               MsgBox "Worksheet: " & Blatt.Name & vbCrLf & "Table: " & LB.Name
           Next
       Next
    End Sub

Tipps für Profis

  • Verwendung von Debug.Print: Nutze Debug.Print, um Probleme schneller zu identifizieren. Dies hilft dir, die Namen der dynamischen Tabellen im Direktfenster zu sehen.

  • Code modularisieren: Teile deinen Code in kleine Subroutinen auf, um die Lesbarkeit und Wartbarkeit zu erhöhen.

  • Error Handling: Implementiere eine Fehlerbehandlung, um Laufzeitfehler elegant zu handhaben:

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0

FAQ: Häufige Fragen

1. Wie kann ich eine dynamische Tabelle erstellen?
Du kannst eine dynamische Tabelle erstellen, indem du deine Daten markierst und auf "Einfügen" > "Tabelle" klickst. Achte darauf, die Option "Meine Tabelle hat Überschriften" auszuwählen.

2. Wie kann ich alle dynamischen Tabellen in einer Arbeitsmappe leeren?
Verwende eine Schleife, um durch alle Arbeitsblätter zu iterieren und die Inhalte jeder dynamischen Tabelle zu löschen, wie im obigen Beispiel gezeigt.

3. Was ist der Unterschied zwischen .ClearContents und .Delete in VBA?
.ClearContents löscht nur die Inhalte der Zellen, während .Delete die gesamten Zeilen oder Spalten entfernt, was für die Arbeit mit dynamischen Tabellen oft sinnvoller 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