27Dateien zeilenweise in Zieltab. copy
02.02.2022 12:31:39
mw-cuore@gmx.de
Jede Datei enthät das gleiche, identische Schema und Anzahl an Spalten. Nur die Anzahl der einzelnen Datensätze (Zeilen) pro Datei ist unterschiedlich. 2x im Jahr müssen diese Einzeltabellen in einer Gesamttabelle zu Auswertungszwecken zusammengefasst werden.
Das mache ich aktuell so:
Sub Kopieren_DatenZeileInZieltabelle()
'Quelle
Workbooks("A_Datentabelle.xlsx").Worksheets("GesamtStatistik").Range("A4:60").Copy
'Ziel (ohne Formate und Formeln)
Workbooks("Zieltabelle.xlsx").Worksheets("Gesamtdaten).Range("A3").PasteSpecial Paste:=xlPasteValues
End Sub
Zusätzlich habe ich in der Zieltabelle einen Button
Sub OpenExcelDatei
Dim name As String
name = Application.GetOpenFilename("Exceldateien (*.xlsx), *.xlsm")
Workbooks.Open(name)
um die einzelnen Quell-Dateien direkt auswählen zu können.
Da jede Range unterschiedlich groß ist, müssen zwei Dinge vor jeder Kopieraktion manuell angepasst werden
1.) Die Range und 2.) der Dateiname.
Hilfreich wäre schon, wenn man statt mit einer Range zu arbeiten die Datensätze aus jeder Einzeldatei zeilenweise
in die Zieltabelle übertragen könnte.
Zieldatei ist geöffnet. Mit dem Makro OpenExceldatei wird die erste Datensatzdatei A_Datentabelle.xlsx geöffnet.
Aus der Quelldatei werden per Buttonklick zeilenweise die Daten ausgelesen. A_Datentabelle.xlsx wird geschlossen,
dann ab zur nächsten "B" Tabelle - same Procedure. OK, beim Schreiben fällt mir auf,
dass man jetzt zumindest manuell noch kurz den veränderten Dateinamen im Kopier-Makro auf
"B_Datentabelle.xlsx" umstellen muss, aber das wäre zu verkraften.
Die Datensätze aus der "B-Tabelle" müssten unterhalb der letzten gefüllten Zeile der Zieltabelle fortgesetzt werden.
Ich habe noch diesen Code zum zeilenweise kopieren gefunden:
Sub HoleDatenAusQuelltabelleZeilenweise()
Dim wsDatenQuelle As Worksheet
Dim wsZiel As Worksheet
Dim lLetzteReiheDatenQuelle As Long
Dim lLetzteReiheZiel As Long
Set wsDatenQuelle = Workbooks("A_Datentabelle.xlsm).Worksheet(EinzelStatistik)
Set wsZiel = Workbooks(Zieltabelle.xlsx).Worksheet(Gesamtdaten)
'Letzte Reihe der DatenQuelle finden
lLetzteReiheDatenQuelle = wsDatenQuelle.Cells(wsDatenQuelle.Rows.Count, "A").End(xlUp).Row
'Letzte Reihe der Ziel Daten finden
lLetzteReiheZiel = wsZiel(wsZiel.Rows.Count, "A").End(xlUp).Offset(1).Row
'Erste auszulesende Reihe jeder Quelltabelle ist ab Zeile A4
wsDatenQuelle.Range("A4:Y" & lLetzteReiheDatenQuelle).copy _
'Erste zu befüllende Reihe der Zieltabelle ist ab Zeile A3, alles ohne Formate und ohne Formeln
wsZiel.Range("A3" & lLetzteReiheZiel).PasteSpecial Paste:=xlPasteValues
End Sub
Schon die Zeile Set wsDatenQuelle = Workbooks("A_Datentabelle.xlsm).Worksheet(GesamtStatistik)
wirft den Fehlercode 438 aus: Laufzeitfehler '438'
Objekt unterstützt diese Eigenschaft oder Methode nicht.
Keine Ahnung, vielleicht liegt es an Excel 365. Der Coder im Anleitungsvideo arbeitet mit Excel 2016.
Bin für jeden Support dankbar. Danke, dass sich der/die ein oder andere die Zeit um Lesen genommen hat