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

1

Gostaria de saber se existe alguma maneira na função personalizada do VBA do Excel 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 Excel VBA Custom muito simples como Myadd

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

Na célula A3 da planilha do Excel, eu digito digamos =Myadd(A1,A2) Isso obviamente funciona bem enquanto A1 & A2 são numéricos. Mas se eu criar um erro excel padrão em A1, por exemplo =1/0 então resulta em # DIV / 0! na A1 e A1 é entrada para a função Myadd. Como não há entrada numérica, o Myadd resulta em #VALUE!.

Eu posso usar a função Isnumeric no VBA, mas seria específico para este exemplo. No entanto, geralmente há alguma maneira de eu saber que a entrada para a função personalizada é, de fato, uma célula contendo um dos códigos de erro como # DIV / 0! ou #VALUE! etc.

Obrigado.

    
por samirj 29.08.2017 / 00:37

1 resposta

1

Para erros, use IsError() ( #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" e 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
por 29.08.2017 / 02:55