並非所有 陣列 都能重新維度化。 即使是明確宣告為動態的陣列,以及變 體變數 內的陣列,有時也會暫時被鎖定。 此錯誤發生的原因與解決方案如下:
你嘗試使用 ReDim 來更改固定大小陣列的元素數量。 例如,在以下程式碼中,固定陣列
FixedArr在程序中NextOne被接收SomeArr,然後嘗試調整大小SomeArr:Sub FirstOne Dim FixedArr(25) As Integer ' Create a fixed-size array and NextOne FixedArr() ' pass it to another procedure. End Sub Sub NextOne(SomeArr() As Integer) ReDim SomeArr(35) ' Error 10 occurs here. '. . . End Sub如果陣列在程序) 中宣告,則用 ReDim (宣告原始陣列,或在模組層) 級宣告時 (未指定元素數,則讓原始陣列成為動態的,而非固定陣列;若陣列在 模組層級 宣告,則不指定元素數。
你嘗試重新維數一個模組層級的動態陣列,其中有一個元素作為程序 的參數 被傳遞。 例如,以下程式碼中,
ModArray是一個動態的模組層級陣列,其第 45 個元素是透過以下Test程序傳入:Dim ModArray () As Integer ' Create a module-level dynamic array. '. . . Sub AliasError() ReDim ModArray (1 To 73) As Integer Test ModArray(45) ' Pass an element of the module-level ' array to the Test procedure. End Sub Sub Test(SomeInt As Integer) ReDim ModArray (1 To 40) As Integer ' Error occurs here. End Sub此時無需傳遞模組層級陣列的元素,因為它在模組中的所有程序中皆可見。 然而,若傳遞元素,陣列會被鎖定以防止程序中參考 參數 的記憶體被釋放,導致程序返回時出現不可預測的行為。
你嘗試為包含陣列的 變體 變數指派一個值,但該 變體 目前被鎖定。 例如,如果你的程式碼使用 For Each...接著 ,迴圈迭代包含陣列的變體,陣列在進入迴圈時被鎖定,迴圈結束時釋放:
SomeArray = Array(9,8,7,6,5,4,3,2,1) For Each X In SomeArray SomeArray = 301 ' Causes error since array is locked. Next X用一個 ......接下來 ,而不是「 各人」......下一個 循環要迭代。 當陣列是 For Each... 的物件時下一個 迴圈,你可以讀取陣列,但不能寫入。
如需詳細資訊,請選取有疑問的項目並按 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。