2016-06-24 4 views
-1

Ich habe mehrere Dateien mit Daten, die in eine einzige Master-Datei mit allen Daten in eine einzige Zeile umgesetzt werden müssen.Erstellen einer Schleife zum Öffnen mehrerer Dateien und Kopieren von Daten in eine Master-Datei in VBA Excel

Ich bin eine komplette Noob in der Programmierung so, wenn der Code, den ich bisher habe keinen Sinn machen, dann bitte, es zu ändern fühlen Sie sich frei

konnte ich diese „Loop alle Excel finden Dateien in Ein Ordner "Code von www.TheSpreadsheetGuru.com Der Code funktioniert einwandfrei, es wird jede Datei einzeln im Ordner öffnen und dann schließen, und dann die nächste Datei öffnen und schließen, bis sie alle Dateien in diesem Ordner durchlaufen hat .

Ich möchte jedoch eine Code-Schleife "Kopieren und Einfügen von Daten" innerhalb der Schleife einfügen. Was also passieren muss, ist, dass der Code "Datei1" in dem Ordner öffnet und dann die Daten kopiert und in die "Master-Datei" in der Zelle A4 einfügt. Dann wird "File1" geschlossen, und dann "File2" öffnen und die Daten in "Master File" in Zelle A5 kopieren und dann "File2" schließen. Dies wird so lange wiederholt, bis alle Dateien im Ordner geöffnet/geschlossen wurden.

Dies ist der Code, den ich gerade habe, aber ich kann nicht den Code zum Kopieren und Einfügen richtig funktionieren. Mir fällt es schwer herauszufinden, wie man die Schleife einstellt, wo der Code weiß, in welcher Datei er sich gerade befindet und einen Zähler für die Zelle der Master-Datei setzt, in die er eingefügt wird.

Sub LLoopAllExcelFilesInFolder() 

'PURPOSE: To loop through all Excel files in a user specified folder and perform a set task on them 
'SOURCE: www.TheSpreadsheetGuru.com 

Dim wb As Workbook 
Dim myPath As String 
Dim myFile As String 
Dim myExtension As String 
Dim FldrPicker As FileDialog 

'Optimize Macro Speed 
Application.ScreenUpdating = False 
Application.EnableEvents = False 
Application.Calculation = xlCalculationManual 

'Retrieve Target Folder Path From User 
    Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker) 

With FldrPicker 
    .Title = "March" 
    .AllowMultiSelect = False 
    If .Show <> -1 Then GoTo NextCode 
    myPath = .SelectedItems(1) & "\" 
End With 

'In Case of Cancelhow 
NextCode: 
myPath = myPath 
If myPath = "" Then GoTo ResetSettings 

'Target File Extension (must include wildcard "*") 
myExtension = "*.xlsx" 

'Target Path with Ending Extention 
myFile = Dir(myPath & myExtension) 

'Loop through each Excel file in folder 
    Do While myFile <> "" 
'Set variable equal to opened workbook 
    Set wb = Workbooks.Open(Filename:=myPath & myFile) 

'THIS IS MY COPY AND PASTE CODE (DOESN'T WORK) 
Dim row As Integer 
While row = 4 

Workbooks("Filename:=myPath & myFile").Worksheets("Resin Log").cell("I5") = Workbooks("Workbook1.xlsm").Worksheets("Sheet1").Range("A" & row).Value 
Next row 

'Save and Close Workbook 
wb.Close SaveChanges:=False 

'Get next file name 
    myFile = Dir 
    Loop 

'Message Box when tasks are completed 
    MsgBox "Task Complete!" 

ResetSettings: 
'Reset Macro Optimization Settings 
Application.EnableEvents = True 
Application.Calculation = xlCalculationAutomatic 
Application.ScreenUpdating = True 

End Sub 
+0

Schwer zu sagen, wenn es funktioniert, wenn Sie keinen Code zur Verfügung stellen ... – findwindow

+0

auch, wenn Sie SO oder sogar google suchen, sind Sie verpflichtet, diesen genauen Code irgendwo zu finden. Dies ist eine sehr häufige Aufgabe - nur vorschlagen, ein wenig tiefer zu suchen –

+0

Entschuldigung, ich hätte den Code kopieren und einfügen. Ich habe versucht, durch Google zu suchen, aber keiner von ihnen funktioniert in meinem Fall. Der Code muss die aktuelle Datei, in der er sich befindet, öffnen, die Daten aus einer bestimmten Zelle kopieren und in die Masterdatei einfügen. Also für ein Beispiel, öffnet "File1", kopiert Zelle "C1" und fügt es in "Master File" in der Zelle "A4" ein und schließt dann "File1". Dann öffnet es "File2", kopiert "C1" und fügt es in "Master File" in der Zelle "A5" ein und schließt "File2". Dann öffnet es "File3", kopiert "C1" und fügt es in die Master-Datei in der Zelle "A6" ein und schließt "File3". Und so weiter ... – Sharkywang

Antwort

1

Es ist möglich zu tun, wovon Sie sprechen. Ich würde vorschlagen, in der Datei nur gesetzt Zellenwerte versuchen, als

eher

targetworkbook.worksheets(1).Range("A1").value = sourceworkbook.Worksheets(1).Range("C4").value direkt erstellt werden, mit .Copy & .Paste so, dass, wenn das Makro eine Weile dauert, Sie laufen nicht aus der Verwendung von Copy gesperrt/Einfügen in anderen Anwendungen. Wenn Sie sich immer noch nicht sicher sind, was Sie tun sollen, versuchen Sie es mit eingeschaltetem Aufnahme-Makro. Der generierte Code muss optimiert werden, aber Sie erhalten das meiste von dem, was Sie brauchen.

Achten Sie auch auf this link für einige andere Dinge, um die Verwendung in Ihrem Code zu vermeiden.

+0

Das Problem ist, dass ich den "Code kopieren und einfügen" brauche, um die Daten aus der aktuellen Datei, in der die Schleife ist, zu kopieren. Die Schleife öffnet also die erste Datei, z. B. "Datei1", und kopiert sie in die "Master-Datei" in Zelle A4. Dann schließt die Schleife "Datei 1" und öffnet "Datei2" und kopiert die Daten in die "Master-Datei" in Zelle A5. Und es geht durch Datei 3 und weiter, Kopieren von Daten in Zelle A6 und so weiter. Allerdings bin ich ein komplettes Excel-Noob und versuchte viele Diff-Codes von Google ohne Glück – Sharkywang

+0

Nein, ich habe das war die Absicht. Wenn ich mein Beispiel verfeinere, wenn MasterFile die Arbeitsmappenvariable 'mf' und' wb' Datei1 ist, verwenden Sie 'mf.worksheets (1) .Range (" A4 "). Value = wb.Worksheets (1) .Range ("A4"). Wert ". Dies hat die gleiche Wirkung wie das Kopieren des Wertes, ohne dass eine Kopie erstellt werden muss, was, wie ich bereits sagte, verhindert, dass Sie Strg + C drücken, um in einer anderen Anwendung zu kopieren und Ihre Ausgabe zu vermasseln. – JMichael

Verwandte Themen