我有一个宏,可以运行多个其他宏。如果它调用的一个宏发生错误,我希望代码跳到下一个宏。我还希望在发生错误时出现一个消息框,以便我知道在哪个宏中发生了错误。因此,我希望发生错误时出现的消息框发生更改,以便告诉我该宏的名称。
Sub Update_ALL()
' Run All the macros
Call Macro_1
Call Macro_2
Call Macro_3
Call Macro_4
Call Macro_5
Call Macro_6
Call Macro_7
Call Macro_8
End Sub
代码非常简单,但是我无法弄清楚如何在出现错误时跳至下一个宏并具有变化的消息框。
谢谢您的帮助!
最佳答案
更改您的“宏”以处理并重新抛出错误,在对Source
的调用中为错误的Err.Raise
指定一个参数:
Public Sub Macro_1()
On Error GoTo CleanFail
'...original code here...
Exit Sub
CleanFail:
Err.Raise Err.Number, "Macro_1", Err.Description
End Sub
如果在执行
Macro_1
时发生错误,则Err.Source
将为“Macro_1”。现在,在“主要”过程中,您需要处理这些冒泡的错误- pop
MsgBox
并将Err.Source
用作例如标题(或根据您的喜好),然后使用Resume Next
清除错误状态并移至下一个宏:Public Sub Update_All()
On Error GoTo CleanFail
Macro_1
Macro_2
'...
Macro_8
Exit Sub
CleanFail:
MsgBox Err.Description, vbExclamation, Err.Source
Resume Next
End Sub
考虑使用有意义的名称重命名您的过程,例如
FormatSummarySheet
或UpdateOrdersTable
。
关于excel - 如何显示一个错误消息框,然后继续代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57598421/