Laufzeitfehler ‚10‘
Dies ist ein Fehler, der auftritt, wenn Sie ein Array neu dimensionieren, das nicht neu dimensioniert werden sollte. In diesem Artikel behandeln wir die möglichen Gründe für das Auftreten dieses Fehlers und wie der Fehler behoben werden kann.
Dies sind die drei möglichen Ursachen des Fehlers:
- Sie haben versucht, mit
ReDim
die Anzahl der Elemente eines Arrays fester Größe zu ändern. - Sie haben versucht, ein dynamisches Array auf Modulebene neu zu dimensionieren, in dem ein Element als Argument an eine Prozedur übergeben wurde.
- Sie haben versucht, einer Variant-Variablen, die ein Array enthält, einen Wert zuzuweisen, aber die Variant-Variable ist derzeit gesperrt.
Wir werden uns jede dieser möglichen Ursachen ansehen und eine Lösung anbieten.
Was verursacht den Fehler?
Bevor Sie mit der Behebung des Fehlers fortfahren, müssen Sie die Fehlerursache in Ihrem VBA-Code identifizieren. Die Codezeile, die den Fehler verursacht, wird gelb hervorgehoben, sobald die Debug-Schaltfläche gedrückt wird.
Ursache 1: Sie haben versucht, mit ReDim die Anzahl der Elemente eines Arrays fester Größe zu ändern.
Im folgenden Code wird beispielsweise das feste Array FixedArr
von SomeArr
in der NextOn
e-Prozedur empfangen, und dann wird versucht, die Größe von SomeArr
zu ändern:
Ursache 2: 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 ModArray
beispielsweise ein dynamisches Array auf Modulebene, dessen fünfundvierzigstes Element als Referenz an die Testprozedur übergeben wird:
Lösung:
In diesem Fall muss kein Element des Arrays auf Modulebene übergeben werden, 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 Referenzparameter innerhalb der Prozedur zu verhindern, was zu unvorhersehbarem Verhalten führt, wenn die Prozedur zurückkehrt.
Ursache 3: Sie haben versucht, einer Variant-Variablen, die ein Array enthält, einen Wert zuzuweisen, aber die Variante ist derzeit gesperrt.
Wenn Ihr Code beispielsweise eine For Each…Next-Schleife verwendet, um eine Variante zu durchlaufen, die ein Array enthält, wird das Array beim Eintritt in die Schleife gesperrt und dann am Ende der Schleife freigegeben:
Lösung:
Verwenden Sie eine For…Next-Schleife anstelle einer For Each…Next-Schleife, um zu iterieren. Wenn ein Array das Objekt einer For Each…Next-Schleife ist, können Sie das Array lesen, aber nicht darauf schreiben.
Benötigen Sie einen VBA Programmierer?
Wir als exact construct programmieren mit einem Team von rd. 20 Mitarbeitern seit über 10 Jahren Excel-Tools. Wir sind ein Nischenanbieter der spezialisiert auf Makros/VBA-Codes ist. Daneben unterstützen wir auch als 3rd Level Support die IT-Abteilungen rund um Probleme bei MS Office (Excel, Word, PowerPoint, etc.).
Haben Sie ein Excel-Problem? Benötigen Sie einen Makro-Programmierer? Rufen Sie uns unverbindlich an +41 52 511 05 25 oder kontaktieren Sie uns via Kontaktformular.