共用方式為


此陣列的長度是固定的或暫時被鎖住 (錯誤 10)

並非所有 陣列 都能重新維度化。 即使是明確宣告為動態的陣列,以及變 變數 內的陣列,有時也會暫時被鎖定。 此錯誤發生的原因與解決方案如下:

  • 你嘗試使用 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 支援與意見反應