Freigeben über


Dieses Array ist unveränderlich oder vorübergehend gesperrt (Fehler 10).

Not all arrays can be redimensioned. Even arrays specifically declared to be dynamic and arrays within Variantvariables are sometimes locked temporarily. This error has the following causes and solutions:

  • Sie haben versucht, ReDim zum Ändern der Anzahl von Elementen eines Arrays mit fester Größe zu verwenden. Im folgenden Code wird das feste Array FixedArr von SomeArr in der NextOne-Prozedur empfangen, und dann wird versucht, die Größe von SomeArr zu ändern:

      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 
    

    Ändern Sie das Originalarray von fest in dynamisch, indem Sie es mit ReDim deklarieren (falls das Array innerhalb einer Prozedur deklariert wird) oder indem Sie es deklarieren, ohne die Anzahl der Elemente anzugeben (falls das Array auf Modulebene deklariert wird).

  • Sie haben versucht, ein dynamisches Array auf Modulebene neu zu dimensionieren, in dem ein Element als Argument an eine Prozedur übergeben wurde. Im folgenden Code ist beispielsweise ein dynamisches Array auf Modulebene, ModArray dessen fünfundvierzigstes Element als Verweis auf die Test Prozedur übergeben wird:

      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 
    

    In diesem Fall ist es nicht erforderlich, ein Element des Arrays auf Modulebene zu übergeben, da es in allen Prozeduren im Modul sichtbar ist. Wenn jedoch ein Element übergeben wird, wird das Array gesperrt, um eine Freigabe des Speichers für den Verweisparameter innerhalb der Prozedur zu verhindern, was zu unvorhersehbarem Verhalten führt, wenn die Prozedur zurückgegeben wird.

  • Sie haben versucht, einer Variant-Variablen , die ein Array enthält, einen Wert zuzuweisen, aber der Variant-Wert ist derzeit gesperrt. Wenn Ihr Code beispielsweise ein For Each-Element verwendet... Als nächste Schleife zum Durchlaufen einer Variante, die ein Array enthält, wird das Array beim Eintritt in die Schleife gesperrt und dann beim Beenden der Schleife freigegeben:

      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 
    

    Verwenden Sie für den Durchlauf anstelle einer For Each...Next -Schleife eine For...Next -Schleife. Wenn ein Array das Objekt einer For Each...Next -Schleife ist, können Sie Daten aus dem Array lesen, jedoch nicht in das Array schreiben.

Weitere Informationen erhalten Sie, indem Sie das fragliche Element auswählen und F1 (unter Windows) bzw. HILFE (unter Macintosh) drücken.

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.