在Excel VBA函数中重新定义数组

时间:2016-11-18 15:02:14

标签: arrays excel-vba vba excel

我正在尝试编写一个函数,它将一个数组作为输入,对它进行一些操作 - 除其他外,通过添加一个额外的行来重新定义它 - 然后输出修改后的数组。但是,当我尝试重新编译数组时,出现错误"Subscript out of range"

为了说明我的问题,我创建了一个简化的编码框架,其中包含一个函数......:

Function funcTestFunction(Number As Integer, Arr As Variant)

ReDim Preserve Arr(0 To Number, 0 To 4)
funcTestFunction = Arr

End Function

......和子程序:

Sub subTestSubroutine()

Dim Number As Integer
Dim Arr() As Variant

Number = 10
ReDim Arr(0 To Number - 1, 0 To 4)
Arr = funcTestFunction(Number, Arr)

End Sub

在此框架中,当我执行subTestSubroutine时,出现"Subscript out of range"错误,该错误位于函数ReDim的{​​{1}}行。

我在这里做错了什么?

编辑#1:

即使以下代码也不起作用:

funcTestFunction

2 个答案:

答案 0 :(得分:2)

如果可以,我会添加评论......

我在这种情况下做的一件事是使用Application.Transpose。我想在2D数组中添加更多行,但实际上只能使用Redim Preserve添加更多列。因此,您可以转置一次,添加列数,然后将其转置回来。

transposeArr = Application.Transpose(Arr)
ReDim Preserve transposeArr(0 To 4, 0 To number)
funcTestFunction = Application.Transpose(transposeArr)

答案 1 :(得分:0)

错误是由于 subTestSubroutine 中的 Arr()调整为 Number-1 而导致的错误 funcTestFunction 中的 Number

尝试使用此代码应该有效:

Function funcTestFunction (Number As Integer, Arr As Variant)

  ReDim Preserve Arr (0 To Number - 1, 0 To 4)
  FuncTestFunction = Arr

End Function

希望这有帮助!