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

Forumthread: VBA Intelligente Tabelle automatisch erweitern

VBA Intelligente Tabelle automatisch erweitern
19.08.2018 21:08:31
legiminator
Hallo zusammen,
ich habe eine Excel-datei für die Arbeitsvorbereitung. Hierfür habe ich ein Arbeitsblatt (Materialliste) in dem ich die Werte für den Auftrag eingebe. In einem anderen Arbeitsblatt (Materialliste Ausgabe) möchte ich die Materiallisten generieren.
Die Materialliste Ausgabe besteht aus einer Intelligenten Tabelle, welche mittels Makro gefüttert wird. die Tabelle hat nur ca. 10 Zeilen. Mein Ziel ist es das nach dem Einfügen der Daten die Tabelle sich automatisch um die benötigten Zeilen erweitert. Dies ist Normalerweis mit eine Intelligenten Tabelle kein Problem, da diese das automatisch macht.
Jetzt kommt die Besonderheit an der Sache:
Im Arbeitsblatt (Materialliste) wird jeder Datensatz in eine Zeile über mehrer Zellen geschrieben.
Die Ausgabe im Arbeitsblatt (Materialliste Ausgabe) soll dann aber über zwei Zeilen erfolgen. Zwischen jedem Datensatz soll dann eine Leerzeile sein.
für diese Aktion des Kopierens habe ich bereits ein Makro gefunden und soweit abändern können. Jedoch erweitert sich die intelligente Tabelle nicht automatisch. Gibt es hier einen Trick, ohne VBA oder gibt es evtl einen Code mit dem ich den Bereich der Intelligenten Tabelle automatisch auf meinen Datenbereich erweitern kann?
  • 
    Sub Materialliste_erstellen()
    'Worksheets("Materialliste Ausgabe").Cells.ClearContents'
    Worksheets("Materialliste Ausgabe").Select
    Range("A5:L1048576").Select
    Selection.ClearContents
    Dim a As Long, i As Long
    Application.ScreenUpdating = False
    a = 5
    For i = 1 To 10000
    With Worksheets("Materialliste")
    If .Cells(i, 1) > "" Then
    Worksheets("Materialliste Ausgabe").Cells(a, 1).Value = Worksheets("Materialliste").Cells(i, 1). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 2).Value = Worksheets("Materialliste").Cells(i, 2). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 3).Value = Worksheets("Materialliste").Cells(i, 4). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 4).Value = Worksheets("Materialliste").Cells(i, 5). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 5).Value = Worksheets("Materialliste").Cells(i, 6). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 6).Value = Worksheets("Materialliste").Cells(i, 7). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 7).Value = Worksheets("Materialliste").Cells(i, 8). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 8).Value = Worksheets("Materialliste").Cells(i, 9). _
    _
    _
    _
    _
    _
    _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 9).Value = Worksheets("Materialliste").Cells(i, 10) _
    _
    _
    _
    _
    _
    _
    .Value
    Worksheets("Materialliste Ausgabe").Cells(a, 10).Value = Worksheets("Materialliste").Cells(i,    _
    _
    _
    _
    _
    _
    _
    11).Value
    Worksheets("Materialliste Ausgabe").Cells(a, 11).Value = Worksheets("Materialliste").Cells(i,    _
    _
    _
    _
    _
    _
    _
    12).Value
    Worksheets("Materialliste Ausgabe").Cells(a, 12).Value = Worksheets("Materialliste").Cells(i,    _
    _
    _
    _
    _
    _
    _
    13).Value
    a = a + 1
    Worksheets("Materialliste Ausgabe").Cells(a + 0, 2).Value = Worksheets("Materialliste").Cells(i, _
    _
    _
    _
    _
    _
    _
    3).Value
    Worksheets("Materialliste Ausgabe").Cells(a + 0, 4).Value = Worksheets("Materialliste").Cells(i, _
    _
    _
    _
    _
    _
    _
    14).Value
    a = a + 2
    'Druckbereich automatisch erweitern
    Dim P As Long
    Dim letzte As Long
    letzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    For P = letzte To 1 Step -1
    If Cells(P, 1)  "" Then
    ActiveSheet.PageSetup.PrintArea = "A1:O" & P
    Exit For
    End If
    Next P
    Else
    End If
    End With
    Next i
    Application.ScreenUpdating = True
    End Sub
    

  • vielen Dank schon mal für die Hilfe
    Anzeige

    5
    Beiträge zum Forumthread
    Beiträge zu diesem Forumthread

    Betreff
    Datum
    Anwender
    Anzeige
    AW: VBA Intelligente Tabelle automatisch erweitern
    20.08.2018 14:30:56
    Torsten
    hallo legiminator,
    ich benutze diesen code, da ich auch das Problem hatte, dass die intell. Tabelle nicht erweitert wurde. Da muss aber die letzte Zeile befuellt sein.
    Dim tbl As ListObject
    Dim Lrow1 As Long
    Lrow1 = Sheets("Tabelle1").Cells(Rows.Count, "A").End(xlUp).Row 'hier Sheetname und die Spalte  _
    anpassen, in der geprueft wird
    Set tbl = Sheets("Tabelle1").ListObjects("Table2")  'hier Sheetname und den Tabellennamen der  _
    intell. Tabelle anpassen
    tbl.Resize tbl.Range.Resize(Lrow1)
    

    Anzeige
    AW: VBA Intelligente Tabelle automatisch erweitern
    20.08.2018 18:43:55
    legiminator
    Hallo Torsten,
    danke für deine schnelle Antwort. Leider komme ich mit dem Code nicht zurecht.
    Lrow1 = Sheets("Tabelle1").Cells(Rows.Count, "A").End(xlUp).Row 'hier Sheetname und die Spalte _
    anpassen, in der geprueft wird

    Hier habe ich die Ursprüngliche Arbeitsmappe angegeben, von der die Daten kopiert werden. So wie ich es verstehe stellt dieser Code den umfang des Bereiches fest?
    Set tbl = Sheets("Tabelle1").ListObjects("Table2") 'hier Sheetname und den Tabellennamen der _
    intell. Tabelle anpassen

    Hier habe ich dann Arbeitsmappe angegeben in der sich die Tabelle befindet.
    Es tut sich zwar was bei der intelligenten Tabelle, jedoch geht dies nicht immer bis in die letzte Zeile. Hat dies evtl. was damit zu tun, das ich bei der Ausgabe die eigentliche "Datenzeile" auf drei Zeilen aufteile?
    Anzeige
    AW: VBA Intelligente Tabelle automatisch erweitern
    22.08.2018 16:49:52
    Torsten
    Hallo,
    dieser Code ist nur dazu da, die intelligente Tabelle zu erweitern.
    Du musst beide Male das Tabellenblatt eintragen, in dem die intelligente Tabelle ist.
    Da wo "Table2" steht, traegst du den Namen der intelligenten Tabelle ein.
    Vielleicht solltest du noch vor dem Tabellenblattnamen ThisWorkbook. schreiben, also
    Dim tbl As ListObject
    Dim Lrow1 As Long
    Lrow1 = ThisWorkbook.Sheets("Dein Tabellenblattname").Cells(Rows.Count, "A").End(xlUp).Row
    Set tbl = ThisWorkbook.Sheets("Dein Tabellenblattname").ListObjects("Dein Tabellenname")
    tbl.Resize tbl.Range.Resize(Lrow1)
    
    Hoffe, dann funktionierts. Melde dich einfach wieder, wenn nicht.
    Anzeige
    AW: VBA Intelligente Tabelle automatisch erweitern
    23.08.2018 20:17:37
    legiminator
    Hallo Torsten,
    danke für diene Geduld. Das mit dem Tabellennamen macht Sinn. Da bin ich auf dem Schlauch gestanden.
    Das erweitern der intelligenten Tabelle funktioniert nun auch. Das einzige Manko ist, das die Tabelle um einiges länger wird als benötigt. Wenn ich das Makro nochmals laufen lasse werden es dann noch mehr Tabellen . Ist wahrscheinlich nur eine Kleinigkeit auf die ich nicht komme. Wäre nett wenn du nochmals einen Blick drauf werfen könntest.
    Ich hätte noch ne weitere Frage an dich. Jede Zeile in diesem Dokument in dem die Daten kopiert werden besteht eigentlich ja aus drei Zeilen. Die Daten verteilen sich über die drei Zeilen. Ich möchte für die Übersichtlichkeit jede Zeile (also immer drei Zeilen) mit einer anderen Hintergrundfarbe hinterlegen. Dies ist ja ganz eifach bei einer intelligenten Tabelle möglich (gebänderte Zeilen). Es ist auch möglich den Farbwechsel nur alle drei Zeilen durchzuführen. Gibt es auch die Möglichkeit, den Beginn des Farbwechsels zu bestimmen? Es sollten die ersten zwei Zeilen weiß sein und dann immer ein Farbwechsel alle drei Zeilen stattfinden.
    Vielen dank schon mal für deine Mühe.
    Hier mal das aktuelle Makro:
  • 
    Sub Materialliste_erstellen()
    'Worksheets("Materialliste Ausgabe").Cells.ClearContents'
    Worksheets("Materialliste Ausgabe").Select
    Range("A5:L1048576").Select
    Selection.ClearContents
    Dim a As Long, I As Long
    Application.ScreenUpdating = False
    a = 5
    For I = 1 To 10000
    With Worksheets("Materialliste")
    If .Cells(I, 1) > "" Then
    Worksheets("Materialliste Ausgabe").Cells(a, 1).Value = Worksheets("Materialliste").Cells(I, 1). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 2).Value = Worksheets("Materialliste").Cells(I, 2). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 3).Value = Worksheets("Materialliste").Cells(I, 4). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 4).Value = Worksheets("Materialliste").Cells(I, 5). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 5).Value = Worksheets("Materialliste").Cells(I, 6). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 6).Value = Worksheets("Materialliste").Cells(I, 7). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 7).Value = Worksheets("Materialliste").Cells(I, 8). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 8).Value = Worksheets("Materialliste").Cells(I, 9). _
    Value
    Worksheets("Materialliste Ausgabe").Cells(a, 9).Value = Worksheets("Materialliste").Cells(I, 10) _
    .Value
    Worksheets("Materialliste Ausgabe").Cells(a, 10).Value = Worksheets("Materialliste").Cells(I,  _
    11).Value
    Worksheets("Materialliste Ausgabe").Cells(a, 11).Value = Worksheets("Materialliste").Cells(I,  _
    12).Value
    Worksheets("Materialliste Ausgabe").Cells(a, 12).Value = Worksheets("Materialliste").Cells(I,  _
    13).Value
    a = a + 1
    Worksheets("Materialliste Ausgabe").Cells(a + 0, 2).Value = Worksheets("Materialliste").Cells(I, _
    3).Value
    Worksheets("Materialliste Ausgabe").Cells(a + 0, 4).Value = Worksheets("Materialliste").Cells(I, _
    14).Value
    a = a + 2
    'Druckbereich automatisch erweitern
    Dim P As Long
    Dim letzte As Long
    letzte = ActiveSheet.UsedRange.SpecialCells(xlCellTypeLastCell).Row
    For P = letzte To 1 Step -1
    If Cells(P, 1)  "" Then
    ActiveSheet.PageSetup.PrintArea = "A1:O" & P + 2
    Exit For
    End If
    Next P
    Dim tbl As ListObject
    Dim Lrow1 As Long
    Lrow1 = ThisWorkbook.Sheets("Materialliste Ausgabe").Cells(Rows.Count, "A").End(xlUp).Row
    Set tbl = ThisWorkbook.Sheets("Materialliste Ausgabe").ListObjects("Tabelle9")
    tbl.Resize tbl.Range.Resize(Lrow1)
    Else
    End If
    End With
    Next I
    Application.ScreenUpdating = True
    End Sub
    

  • Anzeige
    AW: VBA Intelligente Tabelle automatisch erweitern
    24.08.2018 10:42:33
    Torsten
    Hi legitimator,
    ist es moeglich, dass du mir die Datei mal als anonymisierte Datei hochlaedst. Also alle sensiblen Daten rausnehmen, wenns sowas gibt. Ist einfacher das an der Originaldatei zu checken.
    Normal sollte das mit den extra Zeilen nicht passieren. Versteh nicht, warum das kommt, da ja auf die letzte benutzte Zeile geprueft wird.
    Deshalb wuerde ich das gern mal an deiner Datei ausprobieren, damit ich den Fehler eventuell erkenne.
    Danke dir.
    Anzeige
    ;

    Forumthreads zu verwandten Themen

    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige
    Anzeige

    Infobox / Tutorial

    VBA für die automatische Erweiterung intelligenter Tabellen in Excel


    Schritt-für-Schritt-Anleitung

    Um eine intelligente Tabelle in Excel automatisch zu erweitern, kannst Du VBA verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

    1. Öffne den VBA-Editor:

      • Drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
    2. Füge ein neues Modul hinzu:

      • Klicke mit der rechten Maustaste auf VBAProject (DeineDatei.xlsm), wähle Einfügen und dann Modul.
    3. Kopiere den folgenden Code:

      Sub Materialliste_erstellen()
         Worksheets("Materialliste Ausgabe").Cells.ClearContents
         Dim a As Long, i As Long
         Application.ScreenUpdating = False
         a = 5
         For i = 1 To 10000
             With Worksheets("Materialliste")
                 If .Cells(i, 1) > "" Then
                     Worksheets("Materialliste Ausgabe").Cells(a, 1).Value = .Cells(i, 1).Value
                     ' Weitere Zellen hier hinzufügen
                     a = a + 1
                     ' Leerzeile hinzufügen
                     a = a + 1
                 End If
             End With
         Next i
      
         ' Intelligente Tabelle automatisch erweitern
         Dim tbl As ListObject
         Dim Lrow1 As Long
         Lrow1 = Worksheets("Materialliste Ausgabe").Cells(Rows.Count, "A").End(xlUp).Row
         Set tbl = Worksheets("Materialliste Ausgabe").ListObjects("Tabelle1") ' Tabellennamen anpassen
         tbl.Resize tbl.Range.Resize(Lrow1)
         Application.ScreenUpdating = True
      End Sub
    4. Passe die Variablen an:

      • Stelle sicher, dass die Namen der Arbeitsblätter und der intelligenten Tabelle korrekt sind.
    5. Führe das Makro aus:

      • Drücke F5 oder wähle im Menü Ausführen, um das Makro auszuführen.

    Häufige Fehler und Lösungen

    • Die intelligente Tabelle erweitert sich nicht automatisch:

      • Vergewissere Dich, dass Du die richtige letzte Zeile in Deiner Tabelle ermittelst. Achte darauf, dass die Zellen in der letzten Reihe nicht leer sind.
    • Makro funktioniert nicht richtig:

      • Überprüfe, ob Du den richtigen Tabellennamen in Set tbl = Worksheets("Materialliste Ausgabe").ListObjects("Tabelle1") angegeben hast.
    • Tabelle wird zu lang:

      • Stelle sicher, dass Du die Anzahl der Zeilen, die Du in die Tabelle einfügst, korrekt berechnest.

    Alternative Methoden

    Falls Du keine VBA verwenden möchtest, kannst Du die intelligente Tabelle auch manuell erweitern:

    1. Datenbereich anpassen:

      • Klicke mit der rechten Maustaste auf die Tabelle und wähle Tabelle > Bereich anpassen.
    2. Daten über die Tabelle ziehen:

      • Ziehe die untere rechte Ecke der Tabelle, um den Bereich zu erweitern.

    Praktische Beispiele

    • Materialliste in Excel:

      • Verwende die oben genannten Schritte, um eine Materialliste zu erstellen, die automatisch erweitert wird, wenn neue Daten hinzugefügt werden.
    • Erweiterte Datenverwaltung:

      • Nutze VBA, um Daten aus mehreren Arbeitsblättern zu kombinieren und in einer intelligenten Tabelle darzustellen.

    Tipps für Profis

    • Automatisierung verwenden:

      • Du kannst auch Ereignisse wie Worksheet_Change verwenden, um die Tabelle automatisch zu erweitern, wenn neue Daten eingegeben werden.
    • Fehlerbehandlung einfügen:

      • Baue Fehlerbehandlungsroutinen in Dein Makro ein, um sicherzustellen, dass das Programm nicht abstürzt, wenn es auf unerwartete Daten stößt.

    FAQ: Häufige Fragen

    1. Warum funktioniert die automatische Erweiterung nicht? Die Tabelle muss mindestens eine Zelle in der letzten Zeile gefüllt haben, damit die intelligente Tabelle weiß, wie viele Zeilen sie erweitern soll.

    2. Kann ich die Tabelle auch ohne VBA automatisch erweitern? Ja, Du kannst die Tabelle manuell durch Ziehen der Ecken oder durch Anpassen des Datenbereichs erweitern.

    3. Wie kann ich die Formatierung der Tabelle beibehalten? Die Formatierung bleibt erhalten, solange Du die Tabelle über die Resize-Methode im VBA anpasst.

    4. Wie kann ich gebänderte Zeilen in meiner Tabelle einfügen? Du kannst gebänderte Zeilen aktivieren, indem Du die Tabelleneinstellungen in Excel anpasst. Gehe zu Tabellentools und aktiviere die Option für gebänderte Zeilen.

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige