【发布时间】:2019-03-20 19:01:23
【问题描述】:
我有一个二维数组。 我想在它的第一个维度上做一个 redim 保留,但我知道 redim preseve 只在最后一个维度上有效。 我尝试使用转置功能,但似乎转置正在将我的数组从基数 0 更改为基数 1,这正常吗?如果是,如何将其设置回基数 0?或者如何解决我的问题以在更改数组的第一个维度时保留我的数组? 我想在我的数组中添加 2 个元素
这是我遇到问题的代码的一部分:
table3 = Application.Transpose(table3)
ReDim Preserve table3(Ubound(table3,1), Ubound(table3,2) +2)
table3 = Application.Transpose(table3)
我注意到,在转置之前,数组的底数为 0,转置后的底数为 1,我认为这是主要问题。我不想将基数从 0 更改为 1,因为我在代码的其他地方使用了相同的数组,并且我不想更改整个代码。
下面这行代码会报错
“下标超出范围”
ReDim Preserve table3(Ubound(table3,1), Ubound(table3,2) +2)
如果我通过以下行更改它
ReDim Preserve table3(1 To UBound(table3, 1), UBound(table3, 2) + 2)
它会工作,但我的数组将成为一个基于 1 的数组,这不是我想要的,我想让我的索引从 0 开始而不是从 1
转置前
转置后
【问题讨论】:
-
ReDim Preserve table3(0 To UBound(table3, 1), UBound(table3, 2) + 1) -
我在发布之前已经尝试过了,但它失败了。我也试过 0 到 ubound(table3,1)-1 没用。
-
您可以编写一个小实用函数来转置数组而不更改其下限...您不需要使用
Application.Transpose或者编写一个函数来直接执行调整大小而不进行任何转置。 stackoverflow.com/questions/13183775/… -
@user11217663 - 转置确实改变了边界(如果原始下限不是 1)输出下限总是 1
-
table3是如何声明和填充的?