1

我知道还有另一个关于多维数组和 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 缺少什么。

有人可以解释一下吗?

4

2 回答 2

2

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

ReDim Preserve arr(1 To UBound(arr, 1), 1 To UBound(arr, 2) + 1)
于 2017-09-07T08:55:38.367 回答
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
于 2017-09-07T08:56:36.707 回答