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