¿Se pueden atrapar los errores estándar de Excel en la entrada de una función VBA personalizada?

¿Se pueden atrapar los errores estándar de Excel en la entrada de una función VBA personalizada?

Me gustaría saber si hay alguna forma en la función personalizada de Excel VBA de reconocer que los datos de entrada son uno de los errores estándar de Excel, por ejemplo, #DIV/0.

Digamos que tengo una función personalizada de Excel VBA muy simple como Myadd

Function Myadd(a, b)
   Myadd = a + b
End Function

En la celda A3 de la hoja de Excel ingreso decir =Myadd(A1,A2) Esto obviamente funciona bien siempre que A1 y A2 sean numéricos. Pero si creo un error estándar de Excel en A1, por ejemplo, =1/0¡resulta en #DIV/0! en A1 y A1 se ingresa a la función Myadd. Como no hay entrada numérica, Myadd da como resultado #¡VALOR!.

Puedo usar la función Isnumeric en VBA pero sería específica de este ejemplo. Sin embargo, en general, ¿hay alguna forma de saber que la entrada a la función personalizada es en realidad una celda que contiene uno de los códigos de error como #DIV/0? o #VALOR! etc.

Gracias.

ingrese la descripción de la imagen aquí

Respuesta1

Para errores utiliceIsError()( #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!)

Para comprobar que los parámetros contienen un solo uso de celda TypeName(a) = "Range"yCountLarge > 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

información relacionada