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.
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