![](/img/trans.png)
[英]How should VBA.CVErr() be used if it cannot support the Long vartype of vbObjectError..?
[英]VBA: How to Determine if vbObjectError Was Used?
我正在嘗試創建一個集中的錯誤處理程序。 我按照推薦使用 vbObjectError 。 但是我不知道如何編寫一個可以確定我的錯誤是本機錯誤還是自定義錯誤的條件。
即使我稍后將其他自定義錯誤添加到枚舉中,所需的 IsCustomErr 也應該可以正常工作。
Enum CustomEr
LaidEgg = vbObjectError
UserEaten
Paused
Cancelled
End Enum
Sub Test
On Error Goto HANDLER
Err.Raise LaidEgg
Exit Sub
HANDLER:
GlobalHandler
End Sub
Sub GlobalHandler
If IsCustomErr Then MsgBox "Custom"
End Sub
Function IsCustomErr()As Boolean
' ONE OF THESE?
With Err
IsCustomErr = .Number < 0
IsCustomErr = .Number >= vbObjectError
IsCustomErr = (.Number >= vbObjectError) And (.Number < 0)
IsCustomErr = .Number Or vbObjectError
IsCustomErr = TwosComplement(.Number) Or TwosComplement(vbObjectError)
End With
End Function
這似乎可行:
Enum CustomEr
[_First]
laidegg
UserEaten
paused
Cancelled
[_Last]
End Enum
Sub Test1()
Debug.Print "Test1"
On Error GoTo HANDLER
Err.Raise vbObjectError + laidegg
Exit Sub
HANDLER:
GlobalHandler
End Sub
Sub Test2()
Debug.Print "Test2"
On Error GoTo HANDLER
Debug.Print 1 / 0
Exit Sub
HANDLER:
GlobalHandler
End Sub
Sub GlobalHandler()
Debug.Print "Custom?", IsCustomErr()
End Sub
Function IsCustomErr() As Boolean
Dim v As Long
For v = CustomEr.[_First] To CustomEr.[_Last]
If (Err.Number - vbObjectError) = v Then
IsCustomErr = True
Exit For
End If
Next v
End Function
太多不適合作為評論,但這對我有用:
Enum CustomEr
LaidEgg = vbObjectError
UserEaten
Paused
Cancelled
End Enum
Function IsCustomErr() As Boolean
IsCustomErr = Err.Number >= CustomEr.LaidEgg And Err.Number <= CustomEr.Cancelled
End Function
Sub Example()
On Error Resume Next
Err.Raise CustomEr.UserEaten
Debug.Print IsCustomErr
'True
Err.Clear
Err.Raise 1
Debug.Print IsCustomErr
'False
End Sub
它對您不起作用的一個可能原因可能是您在移動到處理程序之前正在結束執行。 來自關於 Err Object 的文章:
Err 對象的屬性在錯誤處理例程中的 Exit Sub、Exit Function、Exit Property 或 Resume Next 語句之后重置為零或零長度字符串 ("")。
另一個潛在的問題是vbObjectError是-2147221504
所以通過檢查Err.Number >= vbObjectError
你將為每個大於vbObjectError
的數字返回True
,這基本上是所有的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.