VBA数组暂时锁定是怎么回事

动态数组在VBA中经常用到,使用ReDim可以修改动态数组最后一维的上界,但是有时会出现运行时错误10,即:该数组被固定或暂时锁定,为什么会出现这种错误呢?
《VBA数组暂时锁定是怎么回事》
【代码解析】
这个测试代码并不复杂,第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)

    原文作者:taller_2000
    原文地址: https://blog.csdn.net/taller_2000/article/details/113488948
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞