Laufzeitfehler 91 in Excel VBA abfangen
Schritt-für-Schritt-Anleitung
Um den Laufzeitfehler 91 in Excel VBA zu beheben, wenn du die Find
-Methode verwendest, kannst du folgende Schritte befolgen:
-
Code schreiben: Beginne mit dem Schreiben deines VBA-Codes zur Suche in einer Liste. Achte darauf, die Find
-Methode korrekt zu verwenden.
Sub suchenstart()
Dim rng As Range
Dim suchetext As String
Dim reihe As Long
Dim anzahl7 As Long
suchetext = "DeinSuchtext" ' Setze hier deinen Suchtext ein
On Error GoTo sprung1
Set rng = Sheets(6).Range("C2:F65500").Find(what:=suchetext, lookat:=xlPart)
If Not rng Is Nothing Then
reihe = rng.Row
anzahl7 = Application.WorksheetFunction.CountA(Sheets(7).Columns(3))
Sheets(6).Rows(reihe).Copy Sheets(7).Rows(anzahl7 + 1)
End If
sprung1:
anzahl7 = Application.WorksheetFunction.CountA(Sheets(7).Columns(3))
If anzahl7 = 0 Then
MsgBox "Es konnte kein Kunde zu diesem Suchtext gefunden werden"
Sheets(6).Cells.Delete
Exit Sub
End If
End Sub
-
Fehlerbehandlung einfügen: Füge eine Fehlerbehandlung mit On Error GoTo
hinzu, um zu verhindern, dass der Code bei einem Fehler abbricht.
-
Überprüfen auf Nothing
: Verwende die If Not rng Is Nothing Then
-Bedingung, um sicherzustellen, dass ein Wert gefunden wurde, bevor du versuchst, auf die Zeile zuzugreifen.
Häufige Fehler und Lösungen
-
Fehler 91: Dieser Fehler tritt auf, wenn du versuchst, auf ein Objekt zuzugreifen, das nicht existiert. In diesem Fall, wenn die Find
-Methode keinen Wert findet.
- Lösung: Überprüfe, ob
rng
Nothing
ist, bevor du auf die Zeile zugreifst.
-
On Error Resume Next funktioniert nicht: Wenn der Fehler auftritt, wird der Code möglicherweise nicht wie gewünscht fortgesetzt.
- Lösung: Stelle sicher, dass du die Fehlerbehandlung korrekt ansetzt und die
Find
-Methode ordnungsgemäß überprüfst.
Alternative Methoden
-
VBA FindNext
nutzen: Wenn du mehrere Vorkommen eines Suchtextes finden möchtest, kannst du FindNext
verwenden, um die Suche fortzusetzen.
-
Suchfunktion ohne Find
: Eine alternative Methode wäre die Verwendung einer Schleife, um alle Zellen in einem Bereich zu überprüfen. Dies kann jedoch langsamer sein.
For Each Zelle In Sheets(6).Range("C2:F65500")
If Zelle.Value = suchetext Then
' Dein Code hier
End If
Next Zelle
Praktische Beispiele
Hier ist ein einfaches Beispiel, das den Fehler abfängt und eine Rückmeldung gibt:
Sub BeispielFehlerAbfangen()
Dim rng As Range
Dim suchetext As String
suchetext = "Beispieltext"
Set rng = Sheets(1).Range("A1:A10").Find(what:=suchetext)
If rng Is Nothing Then
MsgBox "Kein Ergebnis gefunden!"
Else
MsgBox "Wert gefunden in Zeile: " & rng.Row
End If
End Sub
Tipps für Profis
- Debugging: Verwende die
Debug.Print
-Anweisung, um Variablenwerte während der Ausführung zu überwachen.
- Fehlerprotokollierung: Implementiere eine Fehlerprotokollierung, um Fehlerquellen besser nachzuvollziehen.
- Optimierung der Range: Verwende spezifische Bereiche, anstatt die gesamte Spalte zu durchsuchen, um die Performance zu verbessern.
FAQ: Häufige Fragen
1. Was ist Laufzeitfehler 91?
Laufzeitfehler 91 tritt auf, wenn ein Programm versucht, auf ein Objekt zuzugreifen, das nicht existiert oder nicht korrekt initialisiert wurde.
2. Wie kann ich Laufzeitfehler in VBA vermeiden?
Verwende die On Error
-Anweisung, um Fehler abzufangen, und überprüfe, ob Objekte wie z.B. Range
korrekt gesetzt sind, bevor du darauf zugreifst.
3. Gibt es eine Möglichkeit, alle Vorkommen eines Wertes zu finden?
Ja, du kannst die FindNext
-Methode verwenden, um mehrere Vorkommen eines Wertes in einer Range zu finden.