1

Я хотел бы знать, есть ли в пользовательской функции Excel VBA какой-либо способ распознать, что входные данные являются одной из стандартных ошибок Excel, например # DIV/0!

Скажем, у меня есть очень простая функция Excel VBA Custom, как Myadd

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

В ячейку A3 листа Excel я ввожу say =Myadd(A1,A2) Очевидно, это работает нормально, если A1 и A2 являются числовыми. Но если я создаю стандартную ошибку Excel в A1, например, =1/0 это приводит к # DIV/0! в A1 и A1 вводится функция Myadd. Поскольку числового ввода нет, Myadd приводит к #VALUE !.

Я могу использовать функцию Isnumeric в VBA, но это будет характерно для этого примера. Однако, как правило, я могу узнать, что входные данные для пользовательской функции на самом деле являются ячейкой, содержащей один из кодов ошибок, таких как # DIV/0! или # ЗНАЧЕНИЕ! и т.п.

Спасибо.

1 ответ1

1

Для ошибок используйте IsError() (#N/A, #VALUE!, #REF!, #DIV/0!, #NUM!, #NAME?, #NULL!)

Чтобы проверить, что параметры содержат одну ячейку, используйте TypeName(a) = "Range" и 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .