讀古今文學網 > 別怕,ExcelVBA其實很簡單 > 7.4 錯誤處理的藝術 >

7.4 錯誤處理的藝術

因為總會有許多意想不到的錯誤發生,如激活一個不存在的工作表,刪除一個已經打開的文件,所以無論多麼認真和仔細,都不能避免程序在運行時發生錯誤。

但有些錯誤是可以預先知道的,所以可以在程序中加入一些錯誤處理的代碼,保證程序正常運行。

VBA通過On Error語句捕獲運行時錯誤,該語句告訴VBA,如果運行程序時出現錯誤應該怎麼做。

On Error語句有3種形式。

7.4.1 Go Error GoTo標籤

Go Error GoTo該語句告訴VBA,當發生錯誤時,繼續執行標籤所在行及之後的代碼。

沒有出現錯誤的提示對話框,如圖7-21所示。

圖7-21 使用On Error捕獲錯誤

關於標籤的設置,請參閱3.7.7小節中對GoTo語句的介紹。

7.4.2 On Error Resume Next

該語句告訴VBA:如果程序發生錯誤,繼續執行錯誤行後面的代碼。

如果在程序中加入On Error Resume Next語句,運行程序時,即使程序中存在運行時錯誤,也不會中斷程序,顯示錯誤信息,並且會繼續執行錯誤語句之後的代碼。

運行這個程序後,無論當前活動工作簿中是否存在abc工作表,都不會出現錯誤信息,也不會出現最後Msgbox函數的對話框。

發現了嗎?

在程序中,總是把「On Error GoTo標籤」或「On Error Resume Next」放在可能出錯的代碼之前,這是因為只有On Error語句之後出現的運行時錯誤才能被捕捉到,所以通常把捕捉錯誤的語句放在程序開始處。

7.4.3 On Error GoTo 0

使用On Error GoTo 0語句後,將關閉對程序中運行時錯誤的捕捉。如果在On Error GoTo 0語句後,代碼再出現運行時錯誤,儘管在程序一開始已經寫入「On Error GoTo標籤」或「On Error Resume Next」,運行時錯誤都不會被捕捉到,如圖7-22所示。

圖7-22 關閉錯誤捕捉