这段代码是我正在处理的代码的一小部分。我已将问题缩小到以下部分。我有这个 UDF SampleFunction,我需要向其传递一个数组 {3;4} 作为唯一的参数。
Function SampleFunction(InputVar As Variant) As Integer
SampleFunction = InputVar(LBound(InputVar))
End Function
我用两种不同的方式称呼这个 UDF。一、通过VBA
Case 1:
Sub testSF()
MsgBox SampleFunction(Array(3, 4))
End Sub
其次,通过我的 Excel 工作表
Case 2:
={SampleFunction(ROW(3:4))}
-> 即作为数组函数。
问题:
UDF适用于情况1,即通过VBA调用,它给出了#VALUE
当我通过 Excel 工作表调用案例 2 时,出现错误。
对于案例 2,我使用 F8 单步调试了该函数。Lbound(InputVar)
计算结果为 1(这与案例 1 中从 sub 调用不同,它的计算结果为 0),但是InputVar(Lbound(InputVar))
显示案例 2 中的“下标超出范围”错误。
我想知道的是如何从工作表调用 SampleFunction 函数,即情况 2,因此它具有与上面所示的情况 1 相同的行为。作为奖励,如果有人能解释原因就好了Lbound(InputVar)
对上述情况的评价不同。
其他一些细节:
我正在构建一个 UDF 来执行一些正则表达式操作。论点InputVar
上面,将是一个数组 {x;y;z;...} 指定第 x, yth, zth ... 出现。数据类型为InputVar
保留为 Variant,因为我希望能够将数字(作为单长度数组)、数组或范围(接受并转换为数组)传递给函数。
提前致谢!!