【发布时间】:2012-04-23 18:30:31
【问题描述】:
此代码是我正在处理的代码的一小部分。我已将问题缩小到以下部分。我有这个 UDF SampleFunction,我需要将一个数组 {3;4} 作为唯一参数传递给它。
Function SampleFunction(InputVar As Variant) As Integer
SampleFunction = InputVar(LBound(InputVar))
End Function
我以两种不同的方式调用此 UDF。一、通过VBA
案例一:
Sub testSF()
MsgBox SampleFunction(Array(3, 4))
End Sub
其次,通过我的excel工作表作为
案例2:
={SampleFunction(ROW(3:4))} -> 即作为数组函数。
问题:
UDF 适用于案例 1,即通过 VBA 调用,当我通过 excel 工作表调用它时,它会为案例 2 提供 #VALUE 错误。
我在案例 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,因为我希望能够将数字(作为单长度数组)、数组或范围(获取并转换为数组)传递给函数。
提前致谢!!
【问题讨论】:
标签: arrays excel excel-formula excel-2003 vba