错误处理程序 - 退出Sub与End Sub

时间:2009-09-04 03:53:10

标签: vba vb6 error-handling

为什么我要使用Exit Sub退出错误处理程序(处理后)而不是让它转到End Sub?

我确信这很简单。我只是不明白。谢谢你的帮助。

示例:

Public Sub SubA()
On Error Goto ProcError

  ''# other code  
  MsgBox FuncA()

ProcExit:  
  Exit Sub

ProcError:  
  MsgBox Err.Description  
  Resume ProcExit
End Sub

2 个答案:

答案 0 :(得分:26)

您的ProcExit标签是您释放所有资源的地方,无论是否发生错误。例如:

Public Sub SubA()
  On Error Goto ProcError

  Connection.Open
  Open File for Writing
  SomePreciousResource.GrabIt

ProcExit:  
  Connection.Close
  Connection = Nothing
  Close File
  SomePreciousResource.Release

  Exit Sub

ProcError:  
  MsgBox Err.Description  
  Resume ProcExit
End Sub

答案 1 :(得分:1)

通常,如果您声明了数据库连接或其他对象,无论是安全使用还是在异常之前创建,都需要清理(处理掉),然后将错误处理代码返回到ProcExit入口点将允许你可以在两种情况下进行垃圾收集。

如果你通过堕落到退出Sub退出你的程序,你可能会冒着令人讨厌的实例化对象的风险,这些对象只是在程序的内存中。