動态數組在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)