Anzeige
Archiv - Navigation
1908to1912
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

Copy von Listobject zu Listobject

Copy von Listobject zu Listobject
14.12.2022 07:53:15
Listobject
Guten Morgen,
ich möchte aus einer "smarten Tabelle" auf einem Arbeitsblatt in die letzte Zeile einer anderen "smarten" Tabelle auf einem anderen Arbeitsblatt kopieren.
In der "Archiv"-Liste wird beim Ausführen des Makros immer eine neue Zeile am Ende hinzugefügt. Das klappt soweit. Dies sollte sicherstellen, dass die bestehenden archivierten Daten nicht überschrieben werden.
Dass die gewünschten Daten von A nach B kopiert werden, klappt soweit; leider bekomme ich es nicht, hin in die letzte Zeile, erste Zelle zu springen. Für Hilfe wäre ich denkbar.

Sub Filter_Kopieren()
Application.ScreenUpdating = False
Archiv.ListObjects("tbl_archiv").ListRows.Add AlwaysInsert:=True
'Variablen dimensionieren
Dim rng As Range
'Tabelle in Range einlesen
Set rng = Tabelle8.ListObjects("Tabelle1").Range
'Autofilter setzen
rng.AutoFilter 15, "Ja"
'Gefilterte Tabelle kopieren
ActiveSheet.ListObjects("Tabelle1").DataBodyRange.Copy Archiv.ListObjects("tbl_archiv").DataBodyRange
ActiveWorkbook.SlicerCaches("Datenschnitt_Meldung__Z_P_1").ClearManualFilter
Archiv.Select End Sub

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

Betreff
Datum
Anwender
Anzeige
AW: Copy von Listobject zu Listobject
14.12.2022 08:44:44
Listobject
Hi Fritz

Sub t()
Dim loQuelle As ListObject, loZiel As ListObject
Dim lR As ListRow
Set loQuelle = Tabelle8.ListObjects("Tabelle1")
Set loZiel = Archiv.ListObjects("tbl_archiv")
loQuelle.Range.AutoFilter 15, "Ja"
Set lR = loZiel.ListRows.Add
loQuelle.DataBodyRange.Copy lR.Range
End Sub
cu
Chris
AW: Copy von Listobject zu Listobject
14.12.2022 08:54:49
Listobject
Hallo Chris,
VIELEN Dank funktioniert. Sehe ich das korrekt, dass du als "Kopierziel" quasi die hinzugefügte Zeile als "Container" nutzt?
Wäre es vermessen, dich zu bitten, mit zu verraten, wie man die gefilterten Daten bzw. Zeilen aus "Tabelle1" auch gleich löschen kann?
LG Fritz
Anzeige
AW: Copy von Listobject zu Listobject
14.12.2022 09:48:03
Listobject
Hi
Ja, siehst du richtig.
Wenn die ganze Zeile gelöscht werden kann, dann so:

Application.DisplayAlerts = False
loQuelle.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
Sollte es neben der "smarten" Tabelle noch Inhalt geben, welcher nicht gelöscht werden darf, dann müsste ich noch einmal über die Bücher.
cu
Chris
AW: Copy von Listobject zu Listobject
14.12.2022 10:19:15
Listobject
Danke, super. :-)
Mr fällt grad ein: Wie fange ich denn das Problem ab, wenn es gar keine Daten zu kopieren gibt - also der Filter bei "15" leer ist?
LG Fritz
AW: Copy von Listobject zu Listobject
14.12.2022 10:36:47
Listobject
HalloFritz,
ich mach das so:

Sub test1()
Dim rg As Range
On Error Resume Next
Set rg = ActiveSheet.ListObjects("Tabelle1") _
.DataBodyRange.SpecialCells(xlVisible)
On Error GoTo 0
If rg Is Nothing Then
MsgBox "gefiltertes ListObjekt hat keine Daten"
Else
'mach was
End If
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Copy von Listobject zu Listobject
14.12.2022 10:55:07
Listobject
Hallo Fritz,
Luschi war schneller. Ich packe solche Check zweck Fehlertoleranz, die nur innerhalb eines Sub/Function gilt, immer in separaten Function.
Da ein "Trick" für den sichtbaren Bereich eines LO gefunde habe, poste ich trotzdem. Siehe Version 1 & 2: sichtbaren Bereich kann man mit Range("TabX[#Data]") markieren.

Sub Makro4()
Dim loQuelle As ListObject
Dim loZiel As ListObject
Dim LR As ListRow
'Init
Set loQuelle = ActiveSheet.ListObjects("Tabelle1")
Set loZiel = ActiveSheet.ListObjects("Tabelle13")
'Filter
loQuelle.Range.AutoFilter 'Reset Filters
loQuelle.Range.AutoFilter Field:=2, Criteria1:="Jan"
'Test & Copy
If CellTypeVisible_zählen(loQuelle) Then
Set LR = loZiel.ListRows.Add
'Version 1:
loQuelle.DataBodyRange.SpecialCells(xlCellTypeVisible).Copy LR.Range
'Version 2:
'        loQuelle.Parent.Range("Tabelle1[#Data]").Copy LR.Range
End If
'Reset Filter
loQuelle.Range.AutoFilter
End Sub
Private Function CellTypeVisible_zählen(ByRef LO As ListObject) As Long
'bleibt null, falls keine Zeilen sichtbar
On Error Resume Next
CellTypeVisible_zählen = LO.DataBodyRange.SpecialCells(xlCellTypeVisible).Rows.Count
End Function
VG
Yal
Anzeige
AW: Copy von Listobject zu Listobject
14.12.2022 12:42:40
Listobject
Erstmal danke; aber irgendwie kriege ich das nicht in meinen Code eingebaut; aktuell sieht es so aus:

Sub Filter_Kopieren()
Application.ScreenUpdating = False
Dim loQuelle As ListObject, loZiel As ListObject
Dim LR As ListRow
Dim i As Integer
Set loQuelle = Tabelle8.ListObjects("Tabelle1")
Set loZiel = Archiv.ListObjects("tbl_archiv")
loQuelle.Range.AutoFilter 15, "Ja"
i = MsgBox("Sollen Daten, die an XYZ gesendet wurden, archiviert werden?", vbYesNo, "Archivierung")
If i = vbNo Then
MsgBox "Daten wurden nicht kopiert!", vbCritical, "Achtung"
Exit Sub
ElseIf i = vbYes Then
Set LR = loZiel.ListRows.Add
loQuelle.DataBodyRange.Copy LR.Range
MsgBox "Daten wurden kopiert", vbOKOnly = ok, "Archiv"
Application.DisplayAlerts = False
loQuelle.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
End If
Tabelle8.Select
ActiveWorkbook.SlicerCaches("Datenschnitt_Meldung__Z_P_1").ClearManualFilter
End Sub
Leider fehlt "ganz oben" eben die Prüfung, bzw. der "Abbruch" des Makro, wenn Filter 15 leer ist.
Anzeige
AW: Copy von Listobject zu Listobject
14.12.2022 12:59:05
Listobject
Hi
Für meinen Geschmack etwas viel MsgBox, aber ok...

Sub t()
Dim loQuelle As ListObject, loZiel As ListObject
Dim lR As ListRow
Set loQuelle = Tabelle8.ListObjects("Tabelle1")
Set loZiel = Archiv.ListObjects("tbl_archiv")
With loQuelle
.AutoFilter.ShowAllData
If .ListRows.Count = 0 Then
MsgBox "Tabelle ist leer"
Exit Sub
End If
If WorksheetFunction.CountIf(.ListColumns(15).DataBodyRange, "Ja") = 0 Then
MsgBox "keine Daten, welche dem Kriterium entsprechen"
Exit Sub
End If
If MsgBox("Sollen Daten, die an XYZ gesendet wurden, archiviert werden?", vbYesNo, "Archivierung") = vbYes Then
.Range.AutoFilter 15, "Ja"
Set lR = loZiel.ListRows.Add
.DataBodyRange.Copy lR.Range
Application.DisplayAlerts = False
.DataBodyRange.SpecialCells(xlCellTypeVisible).Delete
Application.DisplayAlerts = True
.AutoFilter.ShowAllData
MsgBox "Daten wurden kopiert", vbOKOnly, "Archiv"
Else
MsgBox "Daten wurden nicht kopiert!", vbCritical, "Achtung"
End If
End With
End Sub
cu
Chris
Anzeige
AW: Copy von Listobject zu Listobject
14.12.2022 13:30:50
Listobject
Hi Chris,
Die MsgBox(en) sind der Wunsch vom Chef...
Herrlich ,es hat geklappt, wie geplant.
Vielen Dank an alle :-)
LG Fritz
Aber unter uns gesagt...
14.12.2022 16:39:19
Yal
... schon ein Glück, dass manche Beantworter mütterliche Gefüll haben, mir war es ein Bischen zu sehr "Mama, die Kartoffel in meinem Teller ist gar nicht geschält".
VBA ist nichts für Zuschauer. Was da geliefert wurde, ist Stufe 1. Wenn Du das nicht hinbekommst, lass es bleiben (ich rede nicht von Können, sondern von Wollen).
VBA wirft dich raus bei jeder Kurve. Knie dich rein und beherrsche das Ding. Sonst wird dein Chef für etwas anderes als Msgbox mekern.
Nicht böse gemeint. Sogar ganz im gegenteil zu deinem Wohl.
VG
Yal
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige