捕获连接错误

继续从我的连接查询 ,我现在要捕获任何无法到达的连接,并抛出一个错误信息,指出无法达到相关的连接。

这是我到目前为止的代码,但是,我不知道它是否捕获任何错误:

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程序中。 丑陋。