可以在自訂 VBA 函數的輸入處擷取標準 Excel 錯誤嗎?

可以在自訂 VBA 函數的輸入處擷取標準 Excel 錯誤嗎?

我想知道 Excel VBA 自訂函數中是否有任何方法可以識別輸入資料是標準 Excel 錯誤之一,例如#DIV/0!

假設我有一個非常簡單的 Excel VBA 自訂函數 Myadd

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

在 Excel 工作表儲存格 A3 中,我輸入 say=Myadd(A1,A2) 只要 A1 和 A2 是數字,這顯然就可以正常運作。但如果我在 A1 中建立一個標準的 Excel 錯誤,例如,=1/0那麼它會導致#DIV/0! A1和A1中的內容是Myadd函數的輸入。由於沒有數位輸入,Myadd 結果為#VALUE!。

我可以在 VBA 中使用 Isnumeric 函數,但它特定於本範例。然而,通常有什麼方法可以讓我知道自訂函數的輸入實際上是一個包含錯誤代碼之一的單元格,例如#DIV/0!或#VALUE! ETC。

謝謝。

在此輸入影像描述

答案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

相關內容