由于无效的参数输入,VBA 用户定义的函数未运行
Posted
技术标签:
【中文标题】由于无效的参数输入,VBA 用户定义的函数未运行【英文标题】:VBA user-defined function not run because of invalid argument input 【发布时间】:2017-09-08 15:04:24 【问题描述】:我有一个看起来像这样的 Excel 2016 VBA UDF(用户定义函数);
Public Function AddUDF(Param1 As Single, Param2 As Single)
'Code implementation
End Function
单元格A1
、A2
中的内容是参数Param1
、Param2
的输入。
当单元格 A1 和 A2 包含数字时,UDF 会按预期正常运行。当其中一个单元格包含诸如“N.A”之类的字符串时,不会运行此 UDF 并返回值 #VALUE!
。我知道 UDF 没有运行,因为我在 UDF 中放置了一个断点,并且根本没有到达断点。
如何让 UDF 运行?
【问题讨论】:
将参数更改为变体。 @Scott Craner,这就是答案!请记下它作为答案,我将它标记为答案。你值得加分! 这取决于你对参数做了什么。如果你对它们进行求和,如果它们不是数字,你总是会得到一个错误。 如果您的输入始终是单元格引用,则将输入类型更改为Range
并相应地处理Range.Value
异常,但如果您要像=AddUDF($A$1, 16.5)
一样使用它,那么您将需要@987654331 @参数。
是的,那就用 Scotts 的回答吧。您可能想查看 Chip Pearsons 网站关于从 UDF 返回错误 - cpearson.com/excel/ReturningErrors.aspx
【参考方案1】:
将参数设置为Single
,它告诉 Excel 除了数字之外不接受任何内容。
将参数更改为 Variant 然后测试以确保您想要的类型:
Public Function AddUDF(Param1 As Variant, Param2 As Variant)
If Not (IsNumeric(Param1) And IsNumeric(Param2)) Then
AddUDF = "not numbers"
Exit Function
End If
'the rest of your code.
End Function
【讨论】:
另外值得注意的是,Excel 中的数字单元格是Double
,而不是Single
。
你确定这是正确的吗?如果我输入 1 & 2 它返回 3,A 和 B 返回AB、1 和 A 返回 #VALUE。 If Not (IsNumeric(Param1) And IsNumeric(Param2)) Then
和 AddUDF = CVErr(xlErrNA)
怎么样
这只是一个建议,我没有测试,你是对的。 @DarrenBartrup-Cook
@DarrenBartrup-Cook 说句公道话,OP 的实现是'Code implementation
- 答案不能提供完美工作的易于复制/粘贴的实现,不应该是回答者的问题;- )以上是关于由于无效的参数输入,VBA 用户定义的函数未运行的主要内容,如果未能解决你的问题,请参考以下文章
编译的 MATLAB 错误:“struct”类型的输入参数的未定义函数“ft_datatype_sens”