共用方式為


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

並非所有 陣列 都可以進行轉譯。 即使是特別宣告為動態的陣列,而且 Variant變數內的陣列 有時也會暫時鎖定。 此錯誤發生的原因與解決方案如下:

  • 您嘗試使用 ReDim 來變更固定大小陣列 的元素數目。 例如,在下列程式碼中,會在 程式中接收固定 FixedArr 陣列,然後嘗試調整大小 SomeArrSomeArrNextOne

      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 支援與意見反應