我想知道 Excel VBA 自定义函数中是否有任何方法可以识别输入数据是标准 Excel 错误之一,例如 #DIV/0!
假设我有一个非常简单的 Excel VBA 自定义函数作为 Myadd
Function Myadd(a, b)
Myadd = a + b
End Function
在 Excel 工作表单元格 A3 中,我输入:=Myadd(A1,A2)
只要 A1 和 A2 是数字,这显然可以正常工作。但如果我在 A1 中创建标准 Excel 错误,例如,=1/0
则会导致 A1 中出现 #DIV/0!,并且 A1 是 Myadd 函数的输入。由于没有数字输入,Myadd 会生成 #VALUE!。
我可以在 VBA 中使用 Isnumeric 函数,但它只适用于本示例。但是,一般来说,我有没有办法知道自定义函数的输入实际上是一个包含错误代码(如 #DIV/0! 或 #VALUE! 等)的单元格?
谢谢。
答案1
对于错误使用IsError()
(#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!
)
要检查参数是否包含单个单元格TypeName(a) = "Range"
,请使用CountLarge > 1
Option Explicit
Public Function MyAdd(ByVal a As Variant, ByVal b As Variant) As Long
If TypeName(a) = "Range" Then If a.Cells.CountLarge > 1 Then Set a = a.Cells(1)
If TypeName(b) = "Range" Then If b.Cells.CountLarge > 1 Then Set b = b.Cells(1)
If IsError(a) Then
a = 0
Else
a = IIf(Not IsNumeric(Val(a)), 0, Val(a))
End If
If IsError(b) Then
b = 0
Else
b = IIf(Not IsNumeric(Val(b)), 0, Val(b))
End If
MyAdd = a + b
End Function