避免錯誤情況

發生執行時錯誤時,良好的程式碼應該處理它。最好的錯誤處理策略是編寫檢查錯誤條件的程式碼,並簡單地避免執行導致執行時錯誤的程式碼。

減少執行時錯誤的一個關鍵因素是編寫做一件事的小程式。程式必須失敗的原因越少,整個程式碼除錯就越容易。

避免執行時錯誤 91 - 未設定物件或 With 塊變數:

在分配引用之前使用物件時,將引發此錯誤。可能有一個接收物件引數的過程:

Private Sub DoSomething(ByVal target As Worksheet)
    Debug.Print target.Name
End Sub

如果沒有為 target 分配引用,上面的程式碼將引發一個錯誤,通過檢查物件是否包含實際的物件引用可以輕鬆避免:

Private Sub DoSomething(ByVal target As Worksheet)
    If target Is Nothing Then Exit Sub
    Debug.Print target.Name
End Sub

如果沒有為 target 分配引用,則永遠不會使用未分配的引用,並且不會發生錯誤。

當一個或多個引數無效時,這種早期退出過程的方式稱為保護子句

避免執行時錯誤 9 - 下標超出範圍:

在陣列外部訪問陣列時會引發此錯誤。

Private Sub DoSomething(ByVal index As Integer)
    Debug.Print ActiveWorkbook.Worksheets(index)
End Sub

如果索引大於 ActiveWorkbook 中的工作表數量,則上述程式碼將引發執行時錯誤。一個簡單的保護條款可以避免:

Private Sub DoSomething(ByVal index As Integer)
    If index > ActiveWorkbook.Worksheets.Count Or index <= 0 Then Exit Sub
    Debug.Print ActiveWorkbook.Worksheets(index)
End Sub

Most runtime errors can be avoided by carefully verifying the values we’re using before we use them, and branching on another execution path accordingly using a simple If statement - in guard clauses that makes no assumptions and validates a procedure’s parameters, or even in the body of larger procedures.