Redim Preserve问题(2D数组)

时间:2017-09-07 08:51:35

标签: vba multidimensional-array preserve

我知道另一个多维数组和Redim Preserve的主题。我读了很多,但仍然无法理解为什么我的代码不起作用。

我知道你只能扩展最后一个维度,这就是我想要的:在我的2D数组中添加一个新列。

为了隔离问题,我测试了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它。我不明白接受Redim的原因是什么。

有人可以解释一下吗?

2 个答案:

答案 0 :(得分:2)

在没有相反的Option Base语句的情况下,默认下限为0,但是您为数组指定了一个范围,它的下限始终为1,因此您的代码实际上是在尝试调整第一个通过改变其下限来改变数组的维数。使用:

ReDim Preserve arr(1 To UBound(arr, 1), 1 To UBound(arr, 2) + 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