Excel VBA 自定义函数错误处理 - 仅在编辑单元格时显示错误消息

问题描述 投票:0回答:1

我有一个用 VBA 编写的自定义函数。

在代码开始时,该函数检查输入数据的格式是否正确,如果不正确则显示错误消息。

我遇到的问题是,如果我破坏输入数据(例如,在函数要求为数字的单元格中放入一些文本),那么包含我的函数和引用该数据的每个单元格都会显示错误消息。所以我一下子就收到了大量的错误消息。

我希望能够更改我的函数,以便仅在用户主动编辑单元格时显示错误消息(类似于通常的 Excel 函数错误消息)。

我以为我可以使用 Worksheet_Change 之类的东西,但我不知道如何将其嵌入到我的函数中。

另一种选择是一次只允许 1 条错误消息,但也不知道如何设置。

任何想法将不胜感激!

这是我的代码的开头,其中包含第一个输入数据检查和错误消息:

Public Function OnLevelFactor(effective_dates As Range, rate_changes As Range, OnLevelYear As Range) As Double 'do they only contain numbers (/dates)? If (WorksheetFunction.Count(effective_dates) + WorksheetFunction.CountBlank(effective_dates)) <> effective_dates.Count() Then Msg = "Dates " & effective_dates.Address & " must be numeric." MsgBox Msg, , "Error: OnLevelFactor", Err.HelpFile, Err.HelpContext Exit Function End If 'rest of code End Function
    
excel vba
1个回答
0
投票
Excel 用户定义函数(UDF)中错误处理的正确方法如下:

Public Function OnLevelFactor(effective_dates As Range, rate_changes As Range, _ OnLevelYear As Range) As Variant If (WorksheetFunction.Count(effective_dates) + WorksheetFunction.CountBlank(effective_dates)) <> effective_dates.Count() Then OnLevelFactor = CVErr(xlErrValue) Exit Function End If 'rest of code End Function
函数返回类型应该是Variant。误差常量在 XlCVError 枚举中定义。

按照这种方式,UDF 的工作方式与标准 Excel 函数相同。

如果需要验证用户输入,可以使用Excel的数据验证功能或处理Workbook_Change事件。

© www.soinside.com 2019 - 2024. All rights reserved.