excel用户定义函数的#value错误
Posted
技术标签:
【中文标题】excel用户定义函数的#value错误【英文标题】:#value error with excel user defined function 【发布时间】:2019-12-08 15:55:31 【问题描述】:我在 excel VBA 中创建了用户定义函数:
Public Function RegExpReplace(Text As String, Pattern As String, replaceVar As String, Optional Glob As Boolean = False, Optional IgnoreCase As Boolean = False, Optional Multiline As Boolean = False) As Variant
On Error GoTo ErrHandl
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = Pattern
regex.Global = Glob
regex.IgnoreCase = IgnoreCase
regex.Multiline = Multiline
RegExpReplace = CVar(regex.Replace(Text, replaceVar))
MsgBox RegExpReplace
ErrHandl:
RegExpReplace = CVErr(xlErrValue)
End Function
但是当我试图从工作表中调用它时,我得到了 #VALUE! 错误:
虽然 MsgBox 显示正确的结果:
【问题讨论】:
您发布的代码对我有用。但是由于您没有发布整个代码,因此很难说出您的问题是什么。特别是没有发布错误处理代码。我猜你也运行过这段代码,虽然函数已经成功完成了。 从 VBA Sub 调用您的函数,您可以更轻松地进行调试。 @Storax 这是漏洞代码。目的是将此功能添加到excel Add-in(.xlam文件)并在工作表上使用。 如果这是整个代码,你会得到一个编译错误,你不会得到一个 MsgBox 给你显示的结果。每个函数都需要以End Function
结尾,您还需要定义标签ErrHandl
。请再次仔细检查您的代码。
@Storax 谢谢,我只是忘记发布我的代码的最后 3 行
【参考方案1】:
这样修改你的代码
Public Function RegExpReplace(Text As String, Pattern As String, replaceVar As String, Optional Glob As Boolean = False, Optional IgnoreCase As Boolean = False, Optional Multiline As Boolean = False) As Variant
On Error GoTo ErrHandl
Set regex = CreateObject("VBScript.RegExp")
regex.Pattern = Pattern
regex.Global = Glob
regex.IgnoreCase = IgnoreCase
regex.Multiline = Multiline
RegExpReplace = CVar(regex.Replace(Text, replaceVar))
MsgBox RegExpReplace
Exit Function
ErrHandl:
RegExpReplace = CVErr(xlErrValue)
End Function
如果没有错误,您忘记退出函数,因此即使没有错误,也会执行RegExpReplace = CVErr(xlErrValue)
行给您#Value。
【讨论】:
以上是关于excel用户定义函数的#value错误的主要内容,如果未能解决你的问题,请参考以下文章