一些背景資料:在錯誤退出子,並返回錯誤子調用錯誤子
前體:我有在其他錯誤處理的問題向四周看了看,但我一直沒能充分將答案應用於我的情況。我覺得像Err.Raise
是我將如何完成我將在下面描述。但是,我不確定如何以我需要的方式實現它。如果我要使用Err.Raise
如何在主子文件中引發錯誤代碼之前先退出Sub1-15?
話雖這麼說,
我有一個執行不同的程序過多大的Excel VBA項目。我選擇從一個主程序調用所有程序,以便日後維護各個程序。我在主分支中有一個On Error
處理程序,如果在從該主例程中調用的任何例程中引發錯誤,我都會觸發該處理程序。
有沒有一種辦法:
- 記錄發生
- 錯誤消息
- 子是引發錯誤的
- 錯誤類型
- 上的錯誤退出該子返回到主子,然後
- 提起剛剛發生在其他子使得NotifyandRepair調用錯誤處理程序的錯誤?
我有以下的情況
Sub MainSub()
On Error GoTo NotifyandCorrect
Call Sub1
Call Sub2
...
Call Sub15
Exit Sub
NotifyandCorrect:
'Send copy of faulty file, the error code and Sub that caused it
'Then stop macro execution completely
End Sub
Sub Sub1()
On Error Exit Sub1 and raise current Error in MainSub(?)
'Perform data checks
End Sub
Sub Sub2()
On Error Exit Sub2 and raise current Error in MainSub(?
'Modify data groups
End Sub
Sub Sub15()
On Error Exit Sub15 and raise current Error in MainSub(?
'Clean up work
End Sub
反正我可不必像做下面的每個Sub1的-SUB15的?
Sub MainSub()
On Error GoTo NotifyandCorrect
Call Sub1
Call Sub2
...
Call Sub15
Exit Sub
NotifyandCorrect:
'Send copy of faulty file, the error code and Sub that caused it
'Then stop macro execution completely
End Sub
...
...
Sub Sub15()
On Error Goto HaltExecution
'Clean up work
Exit Sub
HaltExecution:
'Note Error message & type
'Note that Sub15 is where error occurred
End Sub
關閉問題
- 這是在所有可能的?
- 如果這是不可能的,我應該如何處理這個事情來完成我所描述的事情?你會有什麼建議(請提供例子,如果你可以)
所以'Err.Raise'不僅會回憶錯誤,還會導致代碼移回原始的子/主例程以觸發'NotifyandRepair'? – CaffeinatedCoder
是的。在錯誤處理子例程中發生的任何錯誤都需要由調用者處理。請注意,調用沒有任何參數的'Err.Raise' *將有效地「重新拋出」發生的確切錯誤,調用者需要處理 - 您只需指定參數,因爲您想在此處指定「源」。 –
我不知道「Err.Raise」能夠像你所描述的那樣傳遞參數。這對我的情況非常合適,謝謝!不幸的是必須將錯誤處理放在每個子文件中,但是我認爲這是一個很小的代價,對吧? – CaffeinatedCoder