2016-08-12 27 views
2

我幾乎用電子表格完成了比較兩個數組以及任何在一個數組中但不在另一個數組中的任何數據都放入第三個數組的情況。在VBA中打印長單元格數組並獲取下標超出範圍錯誤

然後我想將數組中的值放到工作簿的一個工作表上的單元格中,但即使數組在調試器中顯示了一個值,我也會得到一個下標超出範圍。

這裏是循環打印數組:

If (Not MissingLoans) = -1 Then 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) = "No Missing Loans Found on Roll-Up" 

Else 
    For i = 1 To (UBound(MissingLoans())) Step 1 
     *** ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 

     PrintCell = PrintCell + 1 
    Next 
End If 

我把星號由被給我超出範圍錯誤的線,但MissingLoans(I)是表示一個值。實際上Missingloans(1)是數組中唯一的值。

+1

當PrintCell失敗時,它的價值是什麼? –

+0

11.它從單元格A11開始並向下工作 –

+0

似乎不存在名爲「Inputs and Results」的工作表。 –

回答

0

如果數組中只有一個值,那麼您應該使用Missingloans(0)來訪問它,因爲數組是基於0的。

試試這個

For i = LBound(MissingLoans()) To (UBound(MissingLoans())) Step 1 
    ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1).Value = MissingLoans(i) 
    PrintCell = PrintCell + 1 
Next 
+0

數據從1開始放入數組中。我將其更改爲Option Base 1並使用了Lbound。仍然收到錯誤。 –

+0

如果循環從'1'開始,但是'Ubound' == 0,那麼循環將不會執行,所以這次數組綁定*不能成爲此錯誤的來源。我的錢在工作表名稱上。 –

0

而不是循環的數組,數組直接分配到片:

Else 
    Dim myRange as Range 
    Set myRange = ThisWorkbook.Sheets("Inputs and Results").Cells(PrintCell, 1) 

    '## Assumes Option Base 0, if Option Base 1, remove the +1 
    myRange.Resize(Ubound(MissingLoans)+1).Value = Application.Transpose(MissingLoans) 

    Next 
End If 

如果工作表命名爲Inputs and Results不存在此代碼也應該引發錯誤在ThisWorkbook,我懷疑是你的下標超出範圍的真正原因。

注意:我只會使用Option Base 0,這是默認設置,最常見的是長鏡頭。只要學會忍受它。我也會開始在位置0處填充數組,而不是1.但是如果您堅持使用Option Base 0從1 ...填充它,那麼您需要在陣列上執行迭代For i = 1 To UBound(MissingLoans)循環或ReDim Preserve ,其中任何一種我認爲無意義地使用直接數組>範圍分配更容易完成的任務變得複雜,如上所述。