【发布时间】:2016-06-11 13:10:00
【问题描述】:
一些背景:
Precursor:我已经查看了其他错误处理问题,但我无法将答案完全应用于我的情况。我觉得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
结束问题
- 这可能吗?
- 如果这不可能,我应该如何处理它以执行我所描述的操作?您有什么建议(如果可以,请提供示例)
【问题讨论】:
标签: vba excel error-handling error-logging