标准 Excel 错误可以被捕获在自定义 VBA 函数的输入中吗?

标准 Excel 错误可以被捕获在自定义 VBA 函数的输入中吗?

我想知道 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

相关内容