Gostaria de saber se existe alguma maneira na função personalizada Excel VBA de reconhecer que os dados de entrada são um dos erros padrão do Excel, por exemplo, #DIV/0!
Digamos que eu tenha uma função personalizada do Excel VBA muito simples como Myadd
Function Myadd(a, b)
Myadd = a + b
End Function
Na célula A3 da planilha do Excel, digito: =Myadd(A1,A2)
Isso obviamente funciona bem, desde que A1 e A2 sejam numéricos. Mas se eu criar um erro padrão do Excel em A1, por exemplo, =1/0
isso resultará em #DIV/0! em A1 e A1 é inserido na função Myadd. Como não há entrada numérica, Myadd resulta em #VALUE!.
Posso usar a função Isnumeric no VBA, mas seria específica para este exemplo. No entanto, geralmente existe alguma maneira de saber que a entrada para a função personalizada é na verdade uma célula contendo um dos códigos de erro como #DIV/0! ou #VALOR! etc.
Obrigado.
Responder1
Para erros useIsError()
( #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!
)
Para verificar se os parâmetros contêm uma única célula, use TypeName(a) = "Range"
eCountLarge > 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