2015-09-07 107 views
1

my Connections query之後,我現在想要捕獲任何無法到達的連接並拋出錯誤消息,指出無法達到相關連接。捕獲連接錯誤

這是代碼我迄今,但我不知道它是否捕捉任何錯誤:

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 

可能有人請幫助我,或讓我知道,如果這個代碼將工作?

+0

至於ErrorHandler,我應該顯示err.Description還是上面的代碼會顯示連接名稱和描述? – Sean

回答

3

是的,樣本會捕獲連接錯誤。在MsgBox行更改此修復報告:

MsgBox "A connection could not be reached: " & Err.Number & ": " & Err.Description 

Err大約有最新的錯誤信息。

只有一個問題:全部錯誤將被捕獲,而不僅僅是連接錯誤。這就是爲什麼我建議在你的錯誤處理程序中不要指向cn:如果發生不相關的錯誤(例如,內存不足 - 可能發生!),你不知道它將處於什麼狀態。更好的方法是隻包裝感興趣的代碼。裏面的for循環:

On Error GoTo ErrorHandler 
    cn.Refresh 
    On Error GoTo 0  ' Reset default error handling 

編輯:本On Error GoTo 0脫鉤您ErrorHandler並返回到默認的錯誤處理模式,這是顯示錯誤對話框。 0只是VBA編程爲此目的而識別的一個幻數。在Chip Pearson's page on the subject查看更多詳情和解釋,這是我個人的參考。

我從來沒有使用On Error GoTo -1,但this answer暗示我不會錯過任何東西:)。它顯然用於在ErrorHandler之後繼續執行正常代碼,但是我一直使用Resume,因此沒有問題。

警告:永遠不會永遠不會忘記之前ErrorHandler。我做了一次,陷入了一個無限的錯誤循環中,我只能通過殺死Excel來逃脫。 Resume如果在實際沒有處理錯誤時運行它,並且該錯誤投擲到具有Resume ......錯誤的錯誤處理程序,則會導致錯誤。醜陋。

+0

'0'與'line'或'-1'相對應做什麼? – Sean

+0

@sean編輯 - 查看修訂 – cxw

+0

感謝您的參考。 – Sean