一個完整的 VBA 應用程式,縱使程式碼本身沒有任何設計上的錯誤,也難免會需要處理程式出錯的狀況,典型常見的問題包含輸入錯誤的資料、要讀取的檔案不存在或是各種使用者操作不當所造成的錯誤。
若要對程式實際執行期間所發生的錯誤進行一些處理,就可以使用錯誤處理(error handling)的機制,自動對不同的錯誤做出對應的動作,並決定程式是否要繼續執行,或是直接終止。
預設的狀況下,只要程式出現任何錯誤,就會跳出錯誤訊息的視窗,並且終止程式的執行(就像之前的範例那樣),我們可以使用 On Error
自訂錯誤的處理方式,以下是一個簡單的範例。
Sub Hello() On Error GoTo ErrorHandler ' 啟用錯誤處理機制 Dim x, y, z As Integer x = 10 y = 0 z = x / y ' 出現除以 0 的錯誤 MsgBox "z = " & z Exit Sub ' 結束子程序 ErrorHandler: ' 錯誤處理用的程式碼 MsgBox "錯誤 " & Err.Number & ":" & Err.Description Resume Next ' 繼續往下執行 End Sub
這裡的程式碼可分為上下兩部分,上半部為正常的程式碼,下半部是專門用來處理錯誤的程式碼。
上半部程式碼的第一行,我們使用 On Error
來設定當錯誤發生時的處理方式,錯誤處理的方式有好幾種,最常用的就是使用 GoTo
設定錯誤處理程式碼的位置(也就是這裡的 ErrorHandler
),這樣設定的話,當程式發生錯誤時就會直接跳到下方 ErrorHandler:
的位置來處理錯誤。
在這個程式中,我們故意讓程式產生除以零的錯誤,當錯誤發生時就直接跳到下方 ErrorHandler:
的位置,以 MsgBox
輸出錯誤的編號與錯誤的描述。
接著再呼叫 Resume Next
繼續回到上方正常的程式碼中,從出錯的下一行繼續執行,也就是輸出 z
的值,但是因為 z
的值在之前計算時出錯了,所以它的值是沒有意義的。
我們可以調整這部分的錯誤處理程式碼,自行決定是否要繼續執行,或是直接終止程式。若要在錯誤處理完之後,直接離開子程序,就把 Resume Next
那一行刪掉即可,這樣程式就會按照正常的方式離開子程序。
如果要讓程式忽略任何的錯誤,可以將 On Error
的處理方式指定為 Resume Next
。
On Error Resume Next ' 忽略錯誤,繼續執行 Dim x, y, z As Integer x = 10 y = 0 z = x / y ' 出現除以 0 的錯誤 MsgBox "z = " & z
這樣程式在執行時,不管出了什麼問題,都不會顯示錯誤訊息,而且會繼續執行直到程式結尾。
更多關於 VBA 的教學文章,請參考 VBA 程式設計。
參考資料:Excel Easy、tutorialspoint、ExcelFunctions.net
Page: 1 2