2016-10-10 137 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正試圖使用​​剪貼板。