Excel VBA中是否有错误简历标签?

Excel VBA中是否有错误简历标签?,vba,excel,Vba,Excel,Excel VBA中是否有错误简历标签?如果答案是否定的,为什么呢?是的,有。见下文: Sub Whatever() On Error GoTo ErrProc '... Leave: On Error Resume Next 'Clean up On Error GoTo 0 Exit Sub ErrProc: MsgBox Err.Description, vbCritical Resume Leave End Sub

Excel VBA中是否有错误简历标签?如果答案是否定的,为什么呢?

是的,有。见下文:

Sub Whatever()
    On Error GoTo ErrProc

    '...

Leave:
    On Error Resume Next
     'Clean up
    On Error GoTo 0
    Exit Sub

ErrProc:
    MsgBox Err.Description, vbCritical
    Resume Leave
End Sub

ErrProc
中处理常规错误后,在程序的清理/重置部分也包含错误处理程序,这是一个好习惯吗?我的意思是,您还可以在标签
Leave
中使用
On Error Resume Next
On Error GoTo 0
。是的,在退出子
On Error GoTo 0
之前,重置VBA中的错误处理是一种很好的做法。至于“下一步恢复出错时的
——这是个人偏好,因为当您尝试清除某些对象引用时,它们可能无效,例如
rs.Close
(Recorset)或
doc.Close
(Word)。1。但如果您在“错误恢复下一步”中使用了
,您可能会认为一切都已清除,但实际上并非如此。另一方面,如果不在错误恢复下一步添加
,则始终可以使用调试器找到触发错误的确切行(例如,无法引用哪个对象)。2.至于
On Error GoTo 0
,一旦退出
无论什么
,VBA将恢复其正常的错误检查行为(如果我错了,请纠正我),基本上,您不必担心
On Error Resume Next
in
Leave
中的
On Error Resume会影响调用“Whatever”的子系统中的错误处理设置。可能我使用了错误的术语。不清楚,但关闭,例如
rs.close-设置rs.Nothing
。如果
rs
未打开,则会抛出错误(设置为“无”时,即使对象为空,也不会抛出错误)。再次强调,这是我个人的偏好,因为我曾多次面对这一点,尤其是循环中的word文档。至于
On Error GoTo 0
这主要是针对多个过程(其中A调用B,B调用C),因为VBA使用last On Error语句来指导代码执行。有关类似的内容,请转到Google。我投了反对票,因为这个问题没有研究成果,也没用。我也投票结束了这个问题,因为它太宽泛了。你在问这个问题之前做过研究吗?这实际上是VBA中的“下一步恢复时出错”
。。。