我正在尝试编写一个函数,它将一个数组作为输入,对它进行一些操作 - 除其他外,通过添加一个额外的行来重新定义它 - 然后输出修改后的数组。但是,当我尝试重新编译数组时,出现错误"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
答案 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
希望这有帮助!