Я хотел бы узнать, есть ли способ в пользовательской функции Excel VBA распознать, что входные данные представляют собой одну из стандартных ошибок Excel, например #ДЕЛ/0!
Допустим, у меня есть очень простая пользовательская функция Excel VBA Myadd
Function Myadd(a, b)
Myadd = a + b
End Function
В ячейке A3 листа Excel я ввожу, скажем, =Myadd(A1,A2)
это, очевидно, работает нормально, пока A1 и A2 числовые. Но если я создаю стандартную ошибку Excel в A1, например, =1/0
то это приводит к #DIV/0! в A1, а A1 является входными данными для функции Myadd. Поскольку числовых данных нет, Myadd приводит к #VALUE!.
Я могу использовать функцию Isnumeric в VBA, но это будет специфично для этого примера. Однако, как правило, есть ли способ узнать, что входные данные для пользовательской функции на самом деле являются ячейкой, содержащей один из кодов ошибок, таких как #DIV/0! или #VALUE! и т. д.
Спасибо.
решение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