运行时错误 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