创建循环以打开多个文件并将数据复制到VBA excel中的主文件

时间:2016-06-24 16:13:47

标签: excel vba excel-vba loops copy

我有多个文件,需要将数据转换为单个主文件,所有数据都放在一行中。

我在编程方面是一个完整的菜鸟,所以如果到目前为止我的代码没有任何意义,那么请随时改变它

我能够找到这个"将所有excel文件循环到一个文件夹中#34;代码来自www.TheSpreadsheetGuru.com代码工作得非常好,它将在文件夹中单独打开每个文件,然后关闭它,然后打开下一个文件并关闭它,直到它遍历该文件夹中的每个文件。

但是,我想插入一个"复制和粘贴数据"循环中的代码循环。所以需要发生的是,代码将打开" File1"在文件夹中,然后将数据复制并粘贴到"主文件"在A4单元格中。然后它将关闭" File1",然后打开" File2"并将数据复制到"主文件"在单元格A5中然后关闭" File2"。它将重复此操作,直到文件夹中的所有文件都已打开/关闭。

这是我现在的代码,但我无法获得复制和粘贴代码以使其正常工作。我很难弄清楚如何设置循环,代码将知道它当前在哪个文件上,并为它所粘贴的主文件的单元格设置计数器。

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

1 个答案:

答案 0 :(得分:1)

可以做你正在谈论的事情。我建议,尝试直接在正在创建的文件中设置单元格值

targetworkbook.worksheets(1).Range("A1").value = sourceworkbook.Worksheets(1).Range("C4").value

而不是使用.Copy&amp; .Paste因此,如果宏需要一段时间才能运行,则您无法在其他应用程序中使用“复制/粘贴”。如果您仍然不确定该怎么做,请尝试在启用“录制宏”的情况下执行此操作。生成的代码需要调整,但会为您提供所需的大部分内容。

此外,请务必查看this link以避免在代码中使用其他内容。