Hi,
ich habe in meinem gesammelten Makro-Archiv was gefunden:
Excel-Dateien zusammenführen (gleiche Tabellenstruktur)ich habe eine Zieldatei (Masterfile), die jeden Tag aktualisiert werden muss.
Täglich kommt eine Quelldatei hinzu, deren Tabelle an die Zieldatei (an deren Tabelle) hinzugefügt werden muss. (natürlich ohne die erste Zeile, den Spaltenbeschriftungen)
Dies möchte ich weitgehend automatisieren. Am Besten mit einem Button in der Zieldatei, mit Klick öffnet sich ein Fenster indem ich die Zieldatei auswähle.
Mit OK bestätigen und "zack" sind die Daten an die Zieldatei (deren Tabelle) angefügt.
Somit kann ich quasi die Zieldatei jeden Tag mit ein paar Klicks erweitern OHNE Copy&Paste nutzen zu müssen.
Die Tabellenstruktur der Ziel und Quelldateien sind dabei immer gleich.
Wie bekomme ich es hin, dass aus den ausgewählten Dateien nur Daten kopiert werden, die sich zwischen Spalte A und z.B. F befinden?
(so dass die Zieltabelle über die Spalte F hinaus nicht überschrieben wird)
Teste mal diesen zugehörigen Code an einer Kopie Deiner Daten:
Code:
Public Sub MergeAggregate()
Const FOLDER_PATH = "C:\Ordner\" 'Pfad angepasst
Dim strFilename As String
Dim objTargetWorksheet As Worksheet
Dim objSourceWorkbook As Workbook
Application.ScreenUpdating = False
'Active Tabelle
Set objTargetWorksheet = ActiveSheet
'erste Datei suchen
strFilename = Dir$(FOLDER_PATH & "*.xlsx")
Do Until strFilename = vbNullString
'Öffnet eine Datei
Set objSourceWorkbook = Workbooks.Open(Filename:=FOLDER_PATH & strFilename)
'Kopiert von den Zeilen 2 bis zum Ende
With objSourceWorkbook.ActiveSheet
.Range(.Cells(2, 1), .Cells(.Cells(.Rows.Count, 1).End(xlUp).Row, 6)).Copy
End With
'in die aktive Mappe und fügt sie jeweils unten an
With objTargetWorksheet
.Paste Destination:=.Cells(.Rows.Count, 1).End(xlUp).Offset(1, 0)
End With
Application.CutCopyMode = False
'Schliesst die geöffnete Datei
Call objSourceWorkbook.Close(SaveChanges:=False)
'lese den nächsten Dateinamen
strFilename = Dir$()
Set objSourceWorkbook = Nothing
Loop
Set objTargetWorksheet = Nothing
Application.ScreenUpdating = True
End Sub
Da werden vermutlich alle Dateien eines Ordners nacheinander geladen und in das Arbeitsblatt der aktiven Mappe zusammenkopiert.
Gruß Ralf