[英]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)窗口中調用子例程:
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. , roryap和Doug 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.