2017-03-01 50 views
0

我有三個工作簿;所有信息都包含相同的政策信息,但來自不同的文檔。我試圖在同一單元格的值從具有在工作簿1 &工作簿3.同一工作表名稱爲每個工作表複製這是我的代碼:循環運行時錯誤9

Sub foo() 

    Dim wbk1 As Workbook 
    Dim wbk2 As Workbook 
    Dim wkb3 As Workbook 
    Dim shtName As String 
    Dim i As Integer 

    Set wkb1 = Workbooks.Open("C:\Users\lliao\Documents\Trad Reconciliation.xlsx") 
    Set wkb2 = Workbooks.Open("C:\Users\lliao\Documents\TradReconciliation.xlsx") 
    Set wkb3 = Workbooks.Open("C:\Users\lliao\Documents\Measure Trad Recon LS.xlsx") 

    shtName = wkb2.Worksheets(i).Name 

    For i = 2 To wkb2.Worksheets.Count 
     wkb2.Sheets(shtName).Range("D3").Value = wkb1.Sheets(shtName).Range("D2") 
     wkb2.Sheets(shtName).Range("E3").Value = wkb1.Sheets(shtName).Range("E2") 
     wkb2.Sheets(shtName).Range("F3").Value = wkb1.Sheets(shtName).Range("F2") 
     wkb2.Sheets(shtName).Range("D4").Value = wkb3.Sheets(shtName).Range("D2") 
     wkb2.Sheets(shtName).Range("E4").Value = wkb3.Sheets(shtName).Range("E2") 
     wkb2.Sheets(shtName).Range("F4").Value = wkb3.Sheets(shtName).Range("F2") 
    Next i 

End Sub 

我不明白我怎麼使用下標錯誤。這是我第一次編寫VBA(5年以上的第一次),所以我不熟悉編碼錯誤。

謝謝!

+1

是否所有的工作表名稱的所有工作簿3相同? – Comintern

回答

3
Dim i As Integer 

Set wkb1 = Workbooks.Open("C:\Users\lliao\Documents\Trad Reconciliation.xlsx") 
Set wkb2 = Workbooks.Open("C:\Users\lliao\Documents\TradReconciliation.xlsx") 
Set wkb3 = Workbooks.Open("C:\Users\lliao\Documents\Measure Trad Recon LS.xlsx") 

shtName = wkb2.Worksheets(i).Name 

可變i聲明,但它的分配之前使用 - 因此它的值是一個隱含的0

由於VBA集合是基於1的,這使得wkb2.Worksheets(i)超出範圍。

Dim i As Integer 
i = 1 

'... 

shtName = wkb2.Worksheets(i).Name 

將解決它。

雖然你可能想要在循環中移動它。

+0

也許將'shtName = wkb2.Worksheets(i).Name'移動到'For i = ...' –

+0

@ASH之後......可能不清楚'shtName'應該是什麼;-) –

+0

是的,它根本不清楚。 –

0

可能是你在這之後:

For i = 2 To wkb2.Worksheets.Count 
    wkb2.Sheets(i).Range("D3:F3").Value = wkb1.Sheets(i).Range("D2:F2") 
    wkb2.Sheets(i).Range("D4:F4").Value = wkb3.Sheets(i).Range("D2:F2") 
Next i 
+0

這很有可能。假設表格名稱全部匹配且順序相同。如果情況並非如此,那麼這將非常有效,但不會產生所需的輸出。如果「wkb1」和/或「wkb3」的頁數不同於「wkb2」,它也會失敗。這是打包錯誤檢查的一個很好的基礎。 – FreeMan