将文件循环到主工作表上,但数据保持自我覆盖

我试图在Excel中使用VBA来自动循环一组文件,将其数据粘贴到主电子表格中。 我认为我的代码是正确的,但是有一个大问题。 文件循环和数据拷贝,但是每当另一组数据被粘贴时,它将覆盖先前粘贴的数据。 我需要所有循环文件中的数据一个接一个地填充到主服务器上,而不是一个replace另一个。 我已经粘贴了我在下面使用的代码。 在此先感谢您的帮助!

Sub LoopThroughDirectory() Dim MyFile As String Dim erow Dim Filepath As String Filepath = "V:\Purchasing\Grocery\Promos-DF and Grocery Assistants\HHL\HHL 2016\10-October 2016 HHL\Initial\New Folder\" MyFile = Dir(Filepath) Do While Len(MyFile) > 0 If MyFile = "zOctober Master.xlsm" Then Exit Sub End If Workbooks.Open (Filepath & MyFile) Rows("21:100").Copy ActiveWorkbook.Close erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(2, 0).Row ActiveSheet.Paste Destination:=Worksheets("sheet1").Range(Cells(erow, 1), Cells(erow, 1)) MyFile = Dir Loop End Sub 

使用您想要的单元格作为目的地的左上angular。

  erow = Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(2, 0).Row Sheet1.Paste Destination:=Sheet1.Cells(erow, 1) 

请使用Worksheet .Name属性或Worksheet .CodeName属性 。 混合搭配只会导致麻烦,如果他们成为“不确定的”。 换句话说,如果您要求从工作表代号Sheet1中粘贴下一行,则使用工作表代号Sheet1来标识您的粘贴目标。 在你的代码中没有任何东西可以保证ActiveSheet属性是由Sheet1代码名标识的工作表,也不能保证工作表的名称标签是Sheet1。

我相信你遇到的问题是由End(xlUp)调用引起的。 你写的方式(从最后一个被占用的行开始),它总是会回到第一个单元格,因此会被覆盖。 如果你删除这个调用(保持2行偏移),你的子应该按照需要运行。

一般来说,最好避免完全使用End()因为它的函数根据它遇到的单元格而变化(例如,如果在合并的单元格中调用End(xlToLeft) ,它将前往合并的第一个单元格范围,而不pipe之前的细胞是否被占用并且是连续的)

没有必要select或活动范围。 最好直接使用Range。

打开外部工作簿,然后将范围复制到原始工作簿。

 Sub LoopThroughDirectory() Dim MyFile As String Dim erow Dim xlMyWorkBook As Workbook Dim Filepath As String Filepath = "V:\Purchasing\Grocery\Promos-DF and Grocery Assistants\HHL\HHL 2016\10-October 2016 HHL\Initial\New Folder\" MyFile = Dir(Filepath) Do While Len(MyFile) > 0 If MyFile = "zOctober Master.xlsm" Then Exit Sub End If Set xlMyWorkBook = Workbooks.Open(Filepath & MyFile) xlMyWorkBook.ActiveSheet.Rows("21:100").Copy Sheet1.Cells(Rows.Count, 1).End(xlUp).Offset(2, 0) xlMyWorkBook.Close MyFile = Dir Loop End Sub 

因为如果你还可以修改最大列数(比如100),你可以避免打开/closures工作簿的麻烦和麻烦,因此你的相当“固定”的rangetocopy地址(总是Rows("21:100")

 Option Explicit Sub LoopThroughDirectory() Dim MyFile As String Dim Filepath As String Dim iFile As Long Filepath = "V:\Purchasing\Grocery\Promos-DF and Grocery Assistants\HHL\HHL 2016\10-October 2016 HHL\Initial\New Folder\" MyFile = Dir(Filepath) Do While Len(MyFile) > 0 If MyFile <> "zOctober Master.xlsm" Then iFile = iFile + 1 With ActiveSheet.Range("A1:A80").Resize(,100).Offset((iFile - 1) * 80) .Formula = "='" & Filepath & "[" & MyFile & "]Sheet1'!A21" .value = .value End With End If MyFile = Dir Loop End Sub 

实际上,即使您不能从源表格中获取“固定的”最大列数,也可能采取类似的行动。

但是对于初学者来说,让我们从上面开始