我有一个用 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
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事件。