Live-Forum - Die aktuellen Beiträge
Datum
Titel
23.04.2024 14:59:21
23.04.2024 14:47:39
23.04.2024 14:23:45
Anzeige
Archiv - Navigation
1640to1644
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

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

    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)
    

    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.

    46 Forumthreads zu ähnlichen Themen

    Anzeige
    Anzeige
    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige

    Beliebteste Forumthreads (12 Monate)

    Anzeige
    Anzeige
    Anzeige