Excel VBA子系统外部的错误处理

Excel VBA子系统外部的错误处理,vba,excel,macros,Vba,Excel,Macros,我知道我的标题有点混乱,但这是我的问题。我基本上有一张纸,可以作为各种包装。它能够通过用户表单顺序运行多个宏。基本上,您选中该框,如果选中,它将运行宏。我想做的是,如果有错误,我希望它返回它所在的sub 我的第一个想法是在if语句中,让运行subs的复选框放置一个On Error语句,但这不起作用,因为错误处理会转到被调用的sub,并忽略它前面的内容 我该怎么办?这可能吗 您可以这样做: Sub ErrorHandler() On Error GoTo ErrHandler Call

我知道我的标题有点混乱,但这是我的问题。我基本上有一张纸,可以作为各种包装。它能够通过用户表单顺序运行多个宏。基本上,您选中该框,如果选中,它将运行宏。我想做的是,如果有错误,我希望它返回它所在的sub

我的第一个想法是在if语句中,让运行subs的复选框放置一个On Error语句,但这不起作用,因为错误处理会转到被调用的sub,并忽略它前面的内容


我该怎么办?这可能吗

您可以这样做:

Sub ErrorHandler()
  On Error GoTo ErrHandler
    Call Proc1
    Call Proc2
    Call Proc3
  Exit Sub
ErrHandler:
    MsgBox Err.Source & vbCrLf & Err.Description
End Sub


Sub Proc1()
    On Error GoTo ErrHandler
    ' Your code block start

    ' Your code block end
  Exit Sub
ErrHandler:
    Err.Raise 513, "Proc1", "Customer Error Message 1|" & Err.Description
End Sub


Sub Proc2()
    On Error GoTo ErrHandler
    ' Your code block start

    ' Your code block end
  Exit Sub
ErrHandler:
    Err.Raise 513, "Proc2", "Customer Error Message 2|" & Err.Description
End Sub


Sub Proc3()
    On Error GoTo ErrHandler
    ' Your code block start

    ' Your code block end
  Exit Sub
ErrHandler:
    Err.Raise 513, "Proc3", "Customer Error Message 3|" & Err.Description
End Sub

你可以这样做:

Sub ErrorHandler()
  On Error GoTo ErrHandler
    Call Proc1
    Call Proc2
    Call Proc3
  Exit Sub
ErrHandler:
    MsgBox Err.Source & vbCrLf & Err.Description
End Sub


Sub Proc1()
    On Error GoTo ErrHandler
    ' Your code block start

    ' Your code block end
  Exit Sub
ErrHandler:
    Err.Raise 513, "Proc1", "Customer Error Message 1|" & Err.Description
End Sub


Sub Proc2()
    On Error GoTo ErrHandler
    ' Your code block start

    ' Your code block end
  Exit Sub
ErrHandler:
    Err.Raise 513, "Proc2", "Customer Error Message 2|" & Err.Description
End Sub


Sub Proc3()
    On Error GoTo ErrHandler
    ' Your code block start

    ' Your code block end
  Exit Sub
ErrHandler:
    Err.Raise 513, "Proc3", "Customer Error Message 3|" & Err.Description
End Sub

如果被调用的子进程处理错误,那么您将无能为力。如果被调用的子对象让您看到错误,您可以像处理代码一样处理它。我看不出这里有什么问题。如果被调用的sub处理错误,那么您将无能为力。如果被调用的子对象让您看到错误,您可以像处理代码一样处理它。我看不出这里有什么问题。