我想知道 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