Redim Preserve 问题(二维数组)

Issue with Redim Preserve (2D array)

我知道还有一个关于多维数组和 Redim Preserve 的话题。我读了很多,但仍然不明白为什么我的代码不起作用。

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

为了隔离问题,我测试了 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 缺少什么。

谁能给我解释一下?

在没有相反的 Option Base 语句的情况下,默认下限为 0,但您将范围分配给数组,它的下限始终为 1,因此您的代码实际上是在尝试调整大小数组的第一维也通过改变它的下界。使用:

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

您可以在代码的顶部使用 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