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
vonSomeArr
in derNextOne
-Prozedur empfangen, und dann wird versucht, die Größe vonSomeArr
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 dieTest
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.