捕获连接错误
继续从我的连接查询 ,我现在要捕获任何无法到达的连接,并抛出一个错误信息,指出无法达到相关的连接。
这是我到目前为止的代码,但是,我不知道它是否捕获任何错误:
Private Sub btnRefreshConns_Click() On Error GoTo ErrorHandler Dim cn As WorkbookConnection For Each cn In ActiveWorkbook.Connections cn.Refresh Next Exit Sub ErrorHandler: MsgBox "A connection could not be reached" & cn.Name & ": " & cn.Description End Sub
有人可以帮助我,或者让我知道这个代码是否可行?
是的,该示例将捕获连接错误。 将MsgBox
行更改为此来修复报告:
MsgBox "A connection could not be reached: " & Err.Number & ": " & Err.Description
Err
有关于最新错误的信息。
只有一个问题: 所有错误都会被捕获,而不仅仅是连接错误。 这就是为什么我build议不要在error handling程序中引用cn
:如果发生无关的错误(例如,内存不足 – 可能发生!),您不知道将处于什么状态。 更好的方法是只包装感兴趣的代码。 在For循环中:
On Error GoTo ErrorHandler cn.Refresh On Error GoTo 0 ' Reset default error handling
编辑 : On Error GoTo 0
解开你的ErrorHandler
并返回到默认的error handling模式,这是显示错误对话框。 0
只是VBA编程识别的魔术数字。 在Chip Pearson的主题页面上查看更多细节和解释,这是我个人的参考。
我从来没有使用On Error GoTo -1
,但这个答案表明我不会错过任何东西:)。 它显然是用来在ErrorHandler
之后继续执行正常的代码,但是我一直使用Resume
来实现,并且没有任何问题。
警告:永远不会忘记ErrorHandler
之前的Exit Sub
。 我做了一次,陷入了一个无限的错误循环,我只能通过杀死Excel来逃脱。 如果在实际上没有处理错误时运行它,那么Resume
会导致错误,并且该错误会丢到具有Resume
…的error handling程序中。 丑陋。