簡體   English   中英

VBA錯誤消息框不一致?

[英]Inconsistent VBA Error Message Box?

看起來,當發生未處理的異常時,VBA彈出的消息框的行為會有所不同,具體取決於...某些東西? 要明白我的意思,請創建一個新的.xlsm, 然后創建一個標准模塊Module1 ; 粘貼在此代碼中 然后在Sheet1 Worksheet對象中粘貼此代碼:

Public Sub TestErrMsgBox()
    Debug.Print "Hello!"
    Call Err.Raise(Number:=vbObjectError, Source:="VBAProject.Sheet1",  Description:="Lorem Ipsum")
End Sub

在我的Excel 2010 Professional Plus上,在VBE的“立即”(Ctrl + G)窗口中調用子例程:

調用Module1.TestErrMsgBox
Call Sheet1.TestErrMsgBox

. 將顯示錯誤消息

現在,如果在“立即”窗口中直接調用Raise方法:

Call Err.Raise(Number:=vbObjectError, Source:="VBAProject.Sheet1",  Description:="Lorem Ipsum")

. 它將顯示(預期的)錯誤消息

從第一種情況到最后一種情況,錯誤處理或Err對象的確切變化是什么? 以及如何操縱它? 我發現在第一種情況下,消息僅取決於Raise調用中的Number參數,但它仍然沒有解釋......

我發現這有點煩人,因為我希望我的消息顯示,而不是其他。 總是有可用的口袋妖怪方法(捕獲所有異常並顯示基於Err屬性的自定義MessageBox),但我想了解會發生什么。 :-)

稍后編輯:

當“錯誤陷阱”設置為“未處理的錯誤中斷”時,會發生上述行為。 一旦我輸入“Break on All Errors”,它會顯示正確的消息,並顯示“Debug”按鈕; 然而,這不是一個好主意,打破每個錯誤的執行...

另外,感謝Alex K.roryapDoug Glancy的反饋,我發現當從TestErrMsgBox對象中調用TestErrMsgBox子例程時,會發生這種情況,而不是第一次錯誤報告時從標准模塊調用。 發布是固定的; 但問題仍然存在。 :-)

當您的Sub在Sheet模塊中並且您已將VBE設置為Break on Unhandled Errors時,它發生的原因與Sheet模塊是類模塊的事實有關。 在類模塊中將錯誤陷阱設置為中斷,它將正常運行。

我總是使用這個設置,所以我可以調試UserForms和類。

搜索“類模塊中的VBA err.raise無效的oleverb結構中斷”似乎支持它與類模塊相關的事實。

在類模塊中聲明sub為friend而不是public

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM