【问题标题】:Can't return correct error type for an Excel UDF无法为 Excel UDF 返回正确的错误类型
【发布时间】:2026-01-01 10:10:01
【问题描述】:

我在 Excel 中编写了一个相当简单的 UDF,现在我正在添加错误检查。本质上它只是返回字符串中两个分隔符之间的子字符串。如果没有找到任何一个分隔符,我希望它返回一个 #N/A 错误(就像 MATCH 一样)。我这样做是通过

If (start_delim_pos = 0 Or end_delim_pos = 0) Then
    MYFUNCTION= CVErr(xlErrNA)
End If

但是,我收到 #VALUE 错误。无论我在CVErr 函数中输入什么内容,都会出现#VALUE 错误。

关于问题可能是什么以及如何返回所需错误的任何想法?

【问题讨论】:

  • 从 VBA 中的 Sub 调用您的函数,如果出现错误,您将对其进行调试。从工作表调用时,UDF 不会因调试而中断。或者发布整个代码。

标签: excel error-handling user-defined-functions vba


【解决方案1】:

我的猜测是您将 UDF 的返回类型定义为 String

VBA 不会将error variant 转换为字符串。尝试将返回的字符串分配给错误时,即

MYFUNCTION= CVErr(xlErrNA)

UDF 与 type mismatch 中断,Excel 显示 #VALUE!

如果您希望函数返回字符串或错误代码,请将其返回类型设为As Variant(或直接省略)。

Function MYFUNCTION(...) As Variant
'                        ^^^^^^^^^^  Not As String

【讨论】: