2016-10-10 186 views
0

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

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

我看到一些可能存在问题的东西。

1)当您打开工作簿“StrFile”你必须将其用引号:

Set wb = Workbooks.Open("StrFile") 

这意味着你从字面上寻找一个名为工作簿“StrFile。”如果删除了引号,它会插入变量的内容,我相信这是你想要的内容

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

换句话说,代替在那里你分配Activeworkbook电话,只使用工作簿而不是

3)严格来说,它不是做选择/复制/粘贴,但你可以跳过直接进行复制/粘贴的步骤。更重要的是,你可以通过复制一个范围到另一个

4)你没有问避免使用剪贴板中,但也许关闭工作簿时,你用它

做不建议#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 

随着建议#3你可以消除复制/像这样的东西贴:

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

这可能是如果其他applicati一个很大的帮助ons正试图使用​​剪贴板。