【问题标题】:How to display a changing message box on error and then continue code如何在错误时显示更改消息框然后继续代码
【发布时间】:2019-08-21 19:55:49
【问题描述】:

我有一个运行多个其他宏的宏。如果它调用的宏之一出现错误,我希望代码跳到下一个宏。我还希望在发生错误时出现一个消息框,以便我知道错误发生在哪个宏中。所以,我希望发生错误时出现的消息框会发生变化,以便告诉我该宏的名称。


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

代码非常简单,但我不知道如何在出错时跳到下一个宏并有一个不断变化的消息框。

感谢您的帮助!

【问题讨论】:

  • 让每个宏成为一个返回值的函数而不是子程序,然后在运行后检查每个返回的值,看看是否要继续。
  • 代码会在每个宏之后停止吗?我在一个代码中调用宏的原因是宏运行时间很长,所以我希望下一个宏在完成后自动启动
  • 另外,我不知道把宏变成函数

标签: excel vba error-handling


【解决方案1】:

更改您的“宏”以处理和重新抛出错误,在对Err.Raise 的调用中为错误的Source 指定一个参数:

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”。

现在在“主”过程中,您需要处理这些冒泡的错误 - 弹出 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

【讨论】:

  • 谢谢!我会试试这个!
猜你喜欢
  • 2014-12-12
  • 2012-11-03
  • 2017-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
相关资源
最近更新 更多