사용자 정의 VBA 함수 입력 시 표준 Excel 오류를 포착할 수 있습니까?

사용자 정의 VBA 함수 입력 시 표준 Excel 오류를 포착할 수 있습니까?

Excel VBA 사용자 정의 함수에 입력 데이터가 표준 Excel 오류(예: #DIV/0) 중 하나임을 인식할 수 있는 방법이 있는지 알고 싶습니다.

Myadd와 같은 매우 간단한 Excel VBA 사용자 정의 함수가 있다고 가정해 보겠습니다.

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

=Myadd(A1,A2) Excel 시트 셀 A3에 A1과 A2가 숫자인 한 이것은 분명히 잘 작동한다고 입력합니다 . 그러나 A1에서 표준 Excel 오류를 생성하면 예를 =1/0들어 #DIV/0이 발생합니다! A1 및 A1에서 Myadd 기능에 입력됩니다. 숫자 입력이 없으므로 Myadd의 결과는 #VALUE!입니다.

VBA에서 Isnumeric 함수를 사용할 수 있지만 이 예제에만 해당됩니다. 그러나 일반적으로 사용자 정의 함수에 대한 입력이 실제로 #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

관련 정보