2015-11-02 53 views
2

使用訪問VBA和我似乎無法增加2d動態數組。這似乎是一件容易的事,但我一直 「下標越界」 的錯誤@VBA陣列不能遞增大小

使用ReDim保留affected_CAN_sat(this_array_index,4)

我的代碼:

Dim this_array() as Variant 
ReDim this_array(0,4) 

Dim this_array_index As integer 
this_array_index = Ubound(this_array) 'index = 0 

dim n as integer 
For n = 0 to x ' x is unknown integer 
this_array_index = this_array_index + 1 
ReDim Preserve this_array(this_array_index,4) 
Next 

它應該有增加了數組的大小,但它沒有。請幫助

回答

1

MSDN articleReDim

  • 與保留調整大小。如果使用保留,則只能調整數組的最後一個維度。對於其他維度,您必須指定現有數組的邊界。

話雖這麼說,你的代碼的邏輯是沒有意義的 - 如果你知道你循環是要增加的數量和數組的上邊界會由一個增加每一次,然後就初始化正確的上邊界,而不是循環數組:代替

For n = 0 to 10 '// <~~ We know this will only go up to 10 
    this_array_index = this_array_index + 1 
    ReDim Preserve affected_CAN_sat(this_array_index,4) 
Next 

如果你知道你只是要循環到10則j ust do:

Dim affected_CAN_sat() As Variant 
... 
this_array_index = this_array_index + 10 
ReDim Preserve affected_CAN_sat(0 To this_array_index, 0 To 4) As Variant 
... 

無需循環。

+0

對不起,我以10爲例。真正的情況將是一個未知的數字高達4000. –

+0

你必須知道這個數字,但在代碼的這一點,以便使用'For/Each'循環? –

+0

我知道,但爲了解決主要問題,我選擇了很少考慮它。然而,回到你以前的觀點,爲什麼ReDim無法正常工作。 ReDim是否有任何可能的解決方案只有數組的大小? –