此陣列的長度是固定的或暫時被鎖住 (錯誤 10)
並非所有 數位 都可以進行轉譯。 即使是特別宣告為動態的陣列,而且 Variant變數內的數位有時也會暫時鎖定。 此錯誤發生的原因與解決方案如下:
您嘗試使用 ReDim 來變更固定大小陣列 的元素數目。 例如,在下列程式代碼中,會在 程式中接收固定
FixedArr
數位,然後嘗試重設大小SomeArr
:SomeArr
NextOne
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
是動態的模組層級數位,其四十五個元素正以程式的參考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
在此情況下,不需要傳遞模組層級數位的元素,因為它會顯示在模組中的所有程式中。 不過,如果傳遞專案,則會鎖定數位,以防止在程式內解除分配 reference 參數 的記憶體,導致程式傳回時發生無法預期的行為。
您嘗試將值指派給包含數位 的 Variant 變數,但 Variant 目前已鎖定。 例如,如果您的程序代碼使用 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...接下來 ,而不是 For Each...要 逐一查看的下一個迴圈。 當陣列是 For Each... 的物件時下一個 迴圈,您可以讀取數位,但無法寫入。
如需詳細資訊,請選取有疑問的項目並按 F1 (在 Windows 中) 或 HELP (在 Macintosh 上)。
支援和意見反應
有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應。