将剪贴板粘贴到新的工作簿VBAmacros

我试图循环浏览文件夹中的文件,从每个文件复制未知大小的数据,并将它们全部粘贴到一个新的工作簿中。 我似乎无法得到剪贴板粘贴正确,因为它总是给我一个运行时错误9,下标超出范围。

Sub LoopThroughFiles() Dim StrFile As String StrFile = Dir("filepath") Dim wb As Excel.Workbook Dim itemized As Excel.Workbook Dim dump As Excel.Workbook Do While Len(StrFile) > 0 MsgBox StrFile Set dump = Workbooks.Open("dump.xlsx") Set wb = Workbooks.Open("StrFile") Set wb = ActiveWorkbook Worksheets("DATA2").Visible = True Worksheets("DATA2").Activate Application.Goto Reference:="R1C1:R98C1" Selection.EntireRow.Delete Range("A1").Select ActiveCell.CurrentRegion.Select Selection.Copy Application.Wait DateAdd("s", 1, Now()) Set dump = ActiveWorkbook ActiveWorkbook.Worksheets("Sheet1").Range("A1").Activate ActiveCell.SendKeys ("^v") StrFile = Dir Loop End Sub 

我看到一些有潜在问题的事情。

1)当你打开“StrFile”的工作簿时,你用引号括起来:

 Set wb = Workbooks.Open("StrFile") 

这意味着你正在寻找名为“StrFile”的工作簿。 如果你删除引号,它会插入variables的内容,我相信是你想要的

2)我不清楚你想要复制和粘贴哪个文件。 你的描述看起来很清楚,但是你的代码有混乱。 您可以参考“主动”对象 – 我认为,更好地明确指出要复制和粘贴哪个对象。

换句话说,在分配Activeworkbook的地方replace呼叫,而只是使用工作簿

3)严格来说,做select/复制/粘贴是没有错误的 ,但是你可以直接复制/粘贴来跳过一​​个步骤。 更好的是,您可以通过将一个范围复制到另一个来避免使用剪贴板

4)你没有问,但可能closures工作簿,当你完成它

没有build议#3,这可能是这样的:

 Sub LoopThroughFiles() Dim StrFile As String StrFile = Dir("filepath") Dim wb, itemized, dump As Excel.Workbook Dim ws As Worksheet Do While Len(StrFile) > 0 'MsgBox StrFile Set dump = Workbooks.Open("dump.xlsx") Set wb = Workbooks.Open(StrFile) wb.Worksheets("DATA2").Activate ' specify which workbook directly Application.Goto Reference:="R1C1:R98C1" Selection.EntireRow.Delete wb.Range("A1").Copy ' specify which wb to copy FROM Application.Wait DateAdd("s", 1, Now()) ' specify which workbook to copy TO dump.Worksheets("Sheet1").Range("A1").PasteSpecial xlPasteValuesAndNumberFormats wb.Close StrFile = Dir Loop End Sub 

有了build议#3,你可以消除这样的复制/粘贴:

 dump.Worksheets("Sheet1").Range("A1").Value2 = wb.Range("A1").Value2 

如果其他应用程序试图使用剪贴板,这可以是一个很大的帮助。