共用方式為


此陣列的長度是固定的或暫時被鎖住 (錯誤 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 支援與意見反應