动态数组在VBA中经常用到,使用ReDim
可以修改动态数组最后一维的上界,但是有时会出现运行时错误10,即:该数组被固定或暂时锁定,为什么会出现这种错误呢?
【代码解析】
这个测试代码并不复杂,第3~6行代码为动态数组赋值,第4行代码声明动态数组,其中Preserve
关键字用于更改最后一个维度的大小并保留数组的内容。
第7~10行代码使用For Each
循环遍历数组,第9行代码判断数组的值,如果等于3那么将跳转到100行,第12行代码再次使用ReDim
修改动态数组时,此时For Each
循环并没有正常结束,数组仍处于锁定状态,无法修改数组维度大小,因此将产生运行时错误10。
这样的问题其实也不难解决,只要使用结构化编程方式,不使用GoTo
语句,就完全可以避免这样的错误。
代码如下:
Sub Demo()
Dim arr(), i
For i = 1 To 5
ReDim Preserve arr(1 To i)
arr(i) = i
Next
For Each n In arr
Debug.Print n
If n = 3 Then Exit For
Next
ReDim Preserve arr(1 To 6)
arr(6) = 6
End Sub
微软官方文档:固定或暂时锁定此数组(错误 10)