2013-06-26 27 views
1

我是VBA的新手,一直在開發涉及數組的宏。爲什麼當我想重用它們時,我的VBA數組內容消失了?

在陣列部分,我需要一些範圍從兩個Excel工作簿複製到兩個單獨的陣列(timearray和guzikarray)。然後我會嘗試匹配兩個數組並將結果複製到第三個數組(masterarray)。最後我會將第三個數組的內容寫回到工作表中。

但我發現,當我開始做匹配我的頭兩個陣列的內容會自動刪除。所以沒有任何東西寫回到我的工作表中。任何人都能告訴我爲什麼?

'copy ranges to two arrays: timearray and guzikarray 

masterrows = mastersheet.UsedRange.Rows.count 
guzikrows = guziksheet.UsedRange.Rows.count 
ReDim timearray(1 To masterrows, 1 To 2) 
For i = 1 To i = masterrows 
    timearray(i, 1) = Cells(i, 6).Value 
    timearray(i, 2) = Cells(i, 10).Value 
Next 
ReDim guzikarray(1 To guzikrows, 1 To 6) 
For i = 1 To i = guzikrows 
    guzikarray(i, 1) = guziksheet.Cells(i, 11).Value 
    guzikarray(i, 2) = guziksheet.Cells(i, 17).Value 
    guzikarray(i, 3) = guziksheet.Cells(i, 14).Value 
    guzikarray(i, 4) = guziksheet.Cells(i, 16).Value 
    guzikarray(i, 5) = guziksheet.Cells(i, 18).Value 
    guzikarray(i, 6) = guziksheet.Cells(i, 26).Value 
Next 

'match timearray and guzikarray, and then copied the results to masterarray 

ReDim Preserve masterarray(1 To masterrows, 1 To 4) 
For i = 2 To i = masterrows 
    min = 100000 
    For j = 2 To j = guzikrows 
     If timearray(i, 1) = guzikarray(j, 1) Then 
      If timearray(i, 2) = guzikarray(j, 2) Then 
       If guzikarray(j, 6) <> 0 Then 
        masterarray(i, 1) = guzikarray(j, 4) 
        masterarray(i, 3) = guzikarray(j, 3) 
        If guzikarray(j, 5) < min Then 
         min = guzikarray(j, 5) 
         masterarray(i, 2) = min 
        End If 
        If timearray(i, 1) <> timearray(i + 1, 1) Then 
         If timearray(i, 1) <> timearray(i - 1, 1) Then 
          If guzikarray(j, 2) <> guzikarray(j - 1, 2) Then masterarray(i, 4) = guzikarray(j - 1, 5) 
         End If 
        End If 
       End If 
      End If 
     End If 
    Next 
Next 

'write the results back to master array 

Range(Cells(2, 17), Cells(masterrows, 20)).Value = masterarray 
+0

變化這條線(S):'對於i = 1到i = masterrows'成適合循環:'對於i = 1到masterrows'和類似'guzikrows'並發表評論,如果這有所改善? –

+1

非常感謝KazJaw!它現在有效! – user2522798

回答

0

您的循環工作不作爲語法不正確立即

For i = 1 To i = masterrows
退出而不填充陣列。您應該使用

For i = 1 To masterrows
For i = 1 To guzikrows

+1

omg,非常感謝你!沒想到這是問題! – user2522798

相關問題