这段代码是我正在处理的一小部分。我已将问题缩小到以下部分。我有这个 UDF SampleFunction,我需要将一个数组 {3;4} 作为唯一参数传递给它。
Function SampleFunction(InputVar As Variant) As Integer
SampleFunction = InputVar(LBound(InputVar))
End Function
我用两种不同的方式称这个 UDF。一、通过VBA
情况1:
Sub testSF()
MsgBox SampleFunction(Array(3, 4))
End Sub
其次,通过我的 excel 工作表作为
案例二:
={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、y、z ... 次出现。的数据类型InputVar
保留为 Variant,因为我希望能够将数字(作为单长度数组)、数组或范围(接收并转换为数组)传递给函数。
提前致谢!!