執行時錯誤 9 下標超出範圍
不正確的程式碼
Sub DoSomething()
Dim foo(1 To 10)
Dim i As Long
For i = 1 To 100
foo(i) = i
Next
End Sub
為什麼這不起作用?
foo
是一個包含 10 個專案的陣列。當 i
迴圈計數器達到 11 時,foo(i)
超出範圍。只要使用該陣列或集合中不存在的索引訪問陣列或集合,就會發生此錯誤。
正確的程式碼
Sub DoSomething()
Dim foo(1 To 10)
Dim i As Long
For i = LBound(foo) To UBound(foo)
foo(i) = i
Next
End Sub
為什麼這樣做?
使用 LBound
和 UBound
函式分別確定陣列的下邊界和上邊界。
其他說明
當索引是字串時,例如 ThisWorkbook.Worksheets("I don't exist")
,此錯誤表示查詢的集合中不存在提供的名稱。
實際錯誤是特定於實現的; Collection
將引發執行時錯誤 5無效的過程呼叫或引數而是:
Sub RaisesRunTimeError5()
Dim foo As New Collection
foo.Add "foo", "foo"
Debug.Print foo("bar")
End Sub