Laufzeitfehler ‚9‘

Dies ist ein Fehler, der auftritt, wenn wir versuchen, auf eine Variabel zu verweisen, die nicht im Code vorhanden ist. Um den Code effizient zu debuggen, ist es wichtig, zuerst den Fehler Ihres VBA-Codes zu verstehen. In diesem Artikel werden wir die möglichen Gründe für das Auftreten dieses Fehlers und wie der Fehler behoben werden kann, behandeln.

Dies sind die drei möglichen Ursachen des Fehlers:

  • Undefiniertes Element
  • Bezugnahme auf ein nicht vorhandenes Element
  • Kurzschrift

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: Undefiniertes Element

Dies ist der Fall, wenn Sie versuchen, ein dynamisches Array zu deklarieren, aber vergessen, die Länge eines Arrays mithilfe der Anweisung Dim und ReDim neu zu definieren.

Hinweis: Dim-Anweisung steht für „deklarieren“. Deklarieren bedeutet, dass wir in VBA eine Variabel festlegen, die wir später verwenden werden. Die ReDim-Anweisung wird verwendet, um die Größe oder Größe eines bereits deklarierten dynamischen Arrays zu ändern.

Beispielfehlercode:

Sub Macro1()
	Dim MyArray() as Long
	MyArray(1) = 10
End Sub

Lösung:

Um den Fehler zu beheben, wird empfohlen, mit Dim eine Variable zu deklarieren und dann mit ReDim die Größe zu ändern oder die Anzahl der Elemente im Array anzugeben.

Code:

Sub Macro1()
     Dim MyArray() as Long
     ReDim MyArray(1 to 5)
     MyArray(1) = 10
End Sub

Ursache 2: Verweis auf ein nicht vorhandenes Element

Dies ist der Fall, wenn Sie auf ein Element im Befehl verwiesen haben, das nicht vorhanden ist. Es ist auch möglich, dass der Index entweder größer oder kleiner als der Bereich möglicher Indizes ist oder dem Array zu diesem Zeitpunkt in der Anwendung keine Dimensionen zugewiesen wurden.

Code:

Sub IncorrectSheetname()
     Sheets("Einstellungen").Select
End Sub

Der Fehler tritt auf, wenn kein Blatt mit dem Namen „Einstellungen“ vorhanden ist.

Lösung:

Um den Fehler zu beheben, können Sie entweder das Arbeitsblatt Sheet3 von Settings in Einstellungen umbenennen oder den folgenden Code verwenden:

Sub IncorrectSheetname ()
    Sheets("Settings").Select
End Sub

Tipp. Die bewährte Methode besteht darin, den CodeName des Arbeitsblatts anstelle des Namens des Arbeitsblatts umzubenennen. Der Vorteil der Verwendung von CodeName besteht darin, dass es nicht von der Blattreihenfolge abhängt (im Gegensatz zum Index) und sich nicht ändert, wenn ein Benutzer den Namen ändert, indem er einfach das Blatt in Excel umbenennt.

Klicken Sie auf „Tabelle3 (Einstellungen)“.

Benennen Sie dann den CodeName in ’shtSettings‘ um

Dann können Sie den CodeName (shtSettings) anstelle des Namens des Arbeitsblatts (Settings) verwenden.

Code:

Sub IncorrectSheetname ()
     shtSettings.Select
End Sub

Ursache 3: Kurzschrift

Dies ist der Fall, wenn Sie eine Kurzform des Index verwendet haben, die implizit ein ungültiges Element angegeben hat.

Wenn Sie beispielsweise den ! Operator mit einer Collection verwenden, dann spezifiziert das ! implizit einen Schlüssel.

Beispiel:

Object!keyname.value 

In diesem Fall wird ein Fehler generiert, wenn Schlüsselname einen ungültigen Schlüssel in der Sammlung darstellt. Um den Fehler zu beheben, verwenden Sie einen gültigen Schlüsselnamen oder Index für die Collection.

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.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.