執行時錯誤 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

為什麼這樣做?

使用 LBoundUBound 函式分別確定陣列的下邊界和上邊界。

其他說明

當索引是字串時,例如 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