Laufzeitfehler 91 in VBA beheben
Schritt-für-Schritt-Anleitung
Um den Laufzeitfehler 91 in Excel VBA zu beheben, kannst Du folgendes Vorgehen anwenden:
-
VBA-Editor öffnen: Drücke ALT + F11
, um den VBA-Editor zu öffnen.
-
Modul erstellen: Klicke mit der rechten Maustaste auf "VBAProject (DeineDatei.xlsm)" und wähle Einfügen > Modul
.
-
Code einfügen: Füge den folgenden Beispielcode in das Modul ein:
Sub SucheSerienNummer()
Dim LetzteZeile As Long
Dim i As Long
Dim SerienNummer As String
Dim SerienNummerSuch As Range
LetzteZeile = Sheets("Datenbank").Cells.SpecialCells(xlCellTypeLastCell).Row
For i = 3 To LetzteZeile
SerienNummer = Sheets("Datenbank").Cells(i, 6).Text
Set SerienNummerSuch = Sheets("GEN_A11_BSK").Range("E:E").Find(What:=SerienNummer)
If Not SerienNummerSuch Is Nothing Then
Sheets("Datenbank").Cells(i, 9) = SerienNummerSuch.Offset(0, 9)
End If
Next i
End Sub
-
Code ausführen: Drücke F5
, um das Makro auszuführen.
Häufige Fehler und Lösungen
-
Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt
- Ursache: Dies passiert, wenn die Suchfunktion
Find
keinen Wert findet und Du versuchst, die Rückgabe zu verwenden.
- Lösung: Stelle sicher, dass Du die Rückgabe von
Find
in einer Range
-Variable speicherst und auf Nothing
prüfst:
If Not SerienNummerSuch Is Nothing Then
' Wert gefunden, Code ausführen
End If
-
Falsche Bereichszuweisung
- Ursache: Wenn Du versuchst, auf eine Zelle zuzugreifen, die nicht existiert.
- Lösung: Prüfe, ob der Bereich korrekt angegeben ist.
Alternative Methoden
-
Verwendung von SVERWEIS
für die Suche: Du kannst auch eine Excel-Formel nutzen, um den Wert zu suchen, anstatt ein VBA-Makro zu verwenden. Beispiel:
=SVERWEIS(F3;GEN_A11_BSK!E:N;10;FALSCH)
-
Fehlerbehandlung: Verwende On Error Resume Next
, um Fehler zu ignorieren, aber nutze dies mit Vorsicht.
Praktische Beispiele
Hier ist ein Beispiel für die Suche in zwei Tabellenblättern:
Sub BeispielSuche()
Dim LetzteZeile As Long
Dim i As Long
Dim SerienNummer As String
Dim SerienNummerSuch As Range
LetzteZeile = Sheets("Datenbank").Cells.SpecialCells(xlCellTypeLastCell).Row
For i = 3 To LetzteZeile
SerienNummer = Sheets("Datenbank").Cells(i, 6).Text
Set SerienNummerSuch = Sheets("GEN_A11_BSK").Range("E:E").Find(What:=SerienNummer)
If Not SerienNummerSuch Is Nothing Then
Sheets("Datenbank").Cells(i, 9) = SerienNummerSuch.Offset(0, 9)
End If
Next i
End Sub
Dieses Makro sucht nach der Seriennummer in Spalte E und kopiert den entsprechenden Wert in Spalte I.
Tipps für Profis
- Verwende
Debug.Print
: Um den Prozess zu verfolgen, kannst Du z. B. Debug.Print SerienNummer
vor dem Find
-Aufruf verwenden, um zu überprüfen, welche Werte gesucht werden.
- Optimierung von
Find
: Teste verschiedene Parameter von Find
, um die Leistung zu verbessern.
- Nutze
Error Handling
: Implementiere eine Fehlerbehandlung, um den Code robuster zu gestalten.
FAQ: Häufige Fragen
1. Was bedeutet Laufzeitfehler 91 in Excel VBA?
Laufzeitfehler 91 tritt auf, wenn Du versuchst, auf ein Objekt zuzugreifen, das nicht gesetzt wurde, häufig in Verbindung mit der Find
-Methode.
2. Wie kann ich den Fehler vermeiden?
Stelle sicher, dass Du die Rückgabe von Find
in einer Variablen speicherst und immer auf Nothing
prüfst, bevor Du darauf zugreifst.
3. Gibt es eine Alternative zur Verwendung von Find
?
Ja, Du kannst auch die SVERWEIS
-Funktion in Excel verwenden, um ähnliche Ergebnisse ohne VBA zu erzielen.