Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehler abfangen bei find (Laufzeitfehler 91)

Fehler abfangen bei find (Laufzeitfehler 91)
18.06.2009 16:55:51
uli
Hallo Experten,
habe ein Problem mit der einem Laufzeitfehler (91), sobald ein code eine Liste durchsucht und den gesuchten Wert nicht findet.

Sub suchenstart()
suchen1 = 0
On Error GoTo sprung1
reihe = Sheets(6).Range("C2:F65500").Find(what:=suchetext, lookat:=xlPart).Row
anzahl7 = Application.WorksheetFunction.CountA(Sheets(7).Columns(3))
Sheets(6).Rows(reihe).Copy Sheets(7).Rows(anzahl7 + 1)
On Error GoTo 0
For schleife1 = 1 To Application.WorksheetFunction.CountA(Sheets(6).Columns(3))
On Error GoTo sprung1
reihe = Sheets(6).Range("C" & reihe + 1 & ":F65500").Find(what:=suchetext).Row
anzahl7 = Application.WorksheetFunction.CountA(Sheets(7).Columns(3))
Sheets(6).Rows(reihe).Copy Sheets(7).Rows(anzahl7 + 1)
Next schleife1
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
suchen.Show
End Sub


Der Fehler entsteht beim Suchen in der Schleife, sobald er den Suchtext nicht mehr findet.
Obwohl ich "On Error goto..." eingebaut habe, springt der Code nicht bei Eintreten des Fehlers zur Sprungmarke, sondern bricht ab.
Könnt Ihr mir sagen warum und was ich dagegen tun kann. "On error resume next" habe ich auch schon ausprobiert.
Vielen DAnk im Voraus
Grüße
Uli

Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler abfangen bei find (Laufzeitfehler 91)
18.06.2009 17:04:39
Helmut
Prüfe bei der range.find Methode auf nothing, s. VBA Hilfe
Viel Erfolg
Helmut
AW: Fehler abfangen bei find (Laufzeitfehler 91)
18.06.2009 17:30:55
uli
Hallo Helmut,
vielen Dank! Habs gefunden.
Für die Nachwelt:
Set rng = Sheets(6).Range("C" & reihe + 1 & ":F65500").Find(what:=suchetext)
If Not rng Is Nothing Then
reihe = rng.Row
Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

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:

  1. 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
  2. Fehlerbehandlung einfügen: Füge eine Fehlerbehandlung mit On Error GoTo hinzu, um zu verhindern, dass der Code bei einem Fehler abbricht.

  3. Ü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.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige