天天看點

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)