2017-09-07 342 views
0

然而,隨着多維數組另一個話題和REDIM保留,我知道了。我讀了很多但仍不明白爲什麼我的代碼無法正常工作。問題與REDIM保留(二維數組)

我kwow,你只能延長最後一個維度,這是我想要的:添加新列到我的二維數組。

爲了找出問題,我測試2代碼:

Sub test_Redim_Preserve() 

Dim arr() As Variant 

ReDim arr(10, 10) 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

這項工作很好

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr,1), UBound(arr,2) + 1) 

End Sub 

這給我一個錯誤。 我只是給了一個範圍來填充我的數組,然後我不能將它改變。我不明白缺少接受Redim的是什麼。

有人能解釋一下嗎?

回答

2

默認下界,在沒有選項基本語句相反的,是0,但是您指定一個範圍內的陣列,它總是有一個下界爲1,那麼你的代碼實際上是試圖調整陣列的第一維也是通過改變其下界來實現的。用途:

ReDim Preserve arr(1 To UBound(arr, 1), 1 To UBound(arr, 2) + 1) 
+0

好吧,我現在明白了。我在想,我範圍內的第一個值會到達arr(0,0),但它會轉到arr(1,1)。感謝您的解釋和解決方案。 –

2

你可以在你的代碼的頂部使用Option Base 1,然後你原來的代碼將正常工作。

的完整代碼

Option Base 1 

Sub test_Redim_Preserve2() 

Dim arr() As Variant 

ReDim arr(10, 10) 
arr = Range("A1:J10") 
ReDim Preserve arr(UBound(arr, 1), UBound(arr, 2) + 1) 

End Sub 
+0

感謝您的解決方案。 –