由于无效的参数输入,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

单元格A1A2 中的内容是参数Param1Param2 的输入。

当单元格 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 它返回 3AB 返回AB、1A 返回 #VALUEIf Not (IsNumeric(Param1) And IsNumeric(Param2)) ThenAddUDF = CVErr(xlErrNA) 怎么样 这只是一个建议,我没有测试,你是对的。 @DarrenBartrup-Cook @DarrenBartrup-Cook 说句公道话,OP 的实现是'Code implementation - 答案不能提供完美工作的易于复制/粘贴的实现,不应该是回答者的问题;- )

以上是关于由于无效的参数输入,VBA 用户定义的函数未运行的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA - 用户定义函数 - 可变大小参数

需要帮助查找 PHP 错误的原因:无效的参数号:未定义参数

易失性用户定义函数未按预期重新计算(VBA/Excel)

编译的 MATLAB 错误:“struct”类型的输入参数的未定义函数“ft_datatype_sens”

Firebase firestore 云函数显示错误:无效使用类型“未定义”作为 Firestore 参数

在无效函数输入时返回未定义或抛出错误?