Os erros padrão do Excel podem ser capturados na entrada de uma função VBA personalizada?

Os erros padrão do Excel podem ser capturados na entrada de uma função VBA personalizada?

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/0isso 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.

insira a descrição da imagem aqui

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

informação relacionada