Können Standard-Excel-Fehler bei der Eingabe einer benutzerdefinierten VBA-Funktion abgefangen werden?

Können Standard-Excel-Fehler bei der Eingabe einer benutzerdefinierten VBA-Funktion abgefangen werden?

Ich würde gerne wissen, ob es in der benutzerdefinierten VBA-Funktion von Excel eine Möglichkeit gibt, zu erkennen, dass es sich bei den Eingabedaten um einen der Standard-Excel-Fehler handelt, z. B. #DIV/0!

Angenommen, ich habe eine sehr einfache benutzerdefinierte Excel-VBA-Funktion namens Myadd

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

In die Zelle A3 des Excel-Blatts gebe ich beispielsweise Folgendes ein: =Myadd(A1,A2) Dies funktioniert offensichtlich einwandfrei, solange A1 und A2 numerisch sind. Wenn ich jedoch beispielsweise in A1 einen Standard-Excel-Fehler erzeuge, =1/0führt dies zu #DIV/0! in A1 und A1 ist die Eingabe für die Myadd-Funktion. Da es keine numerische Eingabe gibt, führt Myadd zu #VALUE!.

Ich kann die Isnumeric-Funktion in VBA verwenden, aber sie wäre spezifisch für dieses Beispiel. Gibt es jedoch generell eine Möglichkeit für mich, zu wissen, dass die Eingabe für die benutzerdefinierte Funktion tatsächlich eine Zelle ist, die einen der Fehlercodes wie #DIV/0! oder #VALUE! usw. enthält?

Danke schön.

Bildbeschreibung hier eingeben

Antwort1

Bei Fehlern verwenden SieIsError()( #N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!)

Um zu prüfen, ob die Parameter eine einzelne Zelle enthalten, verwenden Sie TypeName(a) = "Range"undCountLarge > 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

verwandte Informationen