Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: is Nothing abfangen bei Find Befehl

is Nothing abfangen bei Find Befehl
04.03.2019 13:29:27
Martin
Fällt jemandem zufällig sponatan ins Auge, wieso ich bei folgender Abfrage einen Abbruch "424 Objekt erforderlich" kriege?
With ActiveCell
If Worksheets("WERBER_Ueberschriften").Columns(5).Find(What:=.Offset(, -1).Value, LookAt:=xlWhole, SearchDirection:=xlNext).Row Is Nothing Then

mach dies
Else
mach das
End With
Gebe ich nur
Worksheets("WERBER_Ueberschriften").Columns(5).Find(What:=.Offset(, -1).Value, LookAt:=xlWhole, SearchDirection:=xlNext).Row
auf und mache die if Abfrage nicht, kommt der Abbruch nicht. Ich brauche die Prüfung aber in der folgenden Verarbeitung.
Gruß Martin
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: is Nothing abfangen bei Find Befehl
04.03.2019 13:49:46
EtoPHG
Hallo Martin,
Einfach mal die VBA Hilfe zur Find-Methode lesen, dann müsste es klar werden.
Die Methode returniert ein Range-Objekt, das Nothing ist, wenn nichts gefunden wurde und die Range, falls was gefunden wurde. Von diesem Objekt willst du nun die Eigenschaft .Row, dies es natürlich nicht gibt, wenn keine Range retourniert wurde. Du musst das anders angehen, nämlich so ähnlich, wie das Beispiel in der VBA Hilfe zeigt.
Dim c as Range
Set c = ... .Find(What:=.Offset(, -1).Value, Look...)
If Not c Is Nothing Then
Msgbox c.Row
else
Msgbox "DA IS NIX!"
end if
Gruess Hansueli
Anzeige
AW: is Nothing abfangen bei Find Befehl
04.03.2019 13:51:39
Zwenn
Hallo Martin,
ändere die Struktur Deines Codes folgendermaßen ab:

Dim suchErgebnis as Range
Set suchErgebnis = Worksheets("WERBER_Ueberschriften").Columns(5).Find _
(What:=.Offset(, -1).Value, LookAt:=xlWhole, SearchDirection:=xlNext)
If Not suchErgebnis is Nothing Then
'mach was mit suchErgebnis.row (wenn ich richtig damit liege, dass Du auf die Zeile raus  _
willst)
End If
Viele Grüße,
Zwenn
Anzeige
AW: is Nothing abfangen bei Find Befehl
04.03.2019 14:03:34
Martin
Super vielen Dank. Das mit dem Range Object setzen hatte ich auch schon ausprobiert, aber den selben Abbruch bekommen. Das es nun an dem .Row lag, da wär ich nie drauf gekommen! Da hilft mir aber ehrlich gesagt auch die Hilfefunktion nicht weiter...
Danke für die Hilfe!!!
Gruß Martin
Nothing hat nun mal keine Eigenschaften
04.03.2019 14:27:01
EtoPHG
Martin,
Und die Hilfe sagt im ersten Satz der Hinweise klar und deutlich: Wenn keine Übereinstimmung gefunden wird, gibt diese Methode Nothing zurück.
Du musst Dir den Unterschied von Objekten, Methoden, Eigenschaften aneignen. Eigenschaften kann es in einem Objekt zu Hunderten geben. Row ist nur eine davon. Nothing ist ein Zustand eines Objekts und hat keine Eigenschaften!
Gruess Hansueli
Anzeige
;

Forumthreads zu verwandten Themen

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

Abfangen von "Nothing" bei der Find-Methode in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Deklariere eine Range-Variable: Bevor Du die Find-Methode verwendest, musst Du sicherstellen, dass Du eine Range-Variable deklariert hast. Beispiel:

    Dim suchErgebnis As Range
  2. Setze die Range-Variable mit der Find-Methode: Nutze die Find-Methode, um nach einem Wert zu suchen und setze das Ergebnis in die deklarierte Variable:

    Set suchErgebnis = Worksheets("WERBER_Ueberschriften").Columns(5).Find(What:=.Offset(, -1).Value, LookAt:=xlWhole, SearchDirection:=xlNext)
  3. Überprüfe, ob das Ergebnis Nothing ist: Verwende eine If-Abfrage, um zu überprüfen, ob das Suchergebnis Nothing ist:

    If Not suchErgebnis Is Nothing Then
       MsgBox "Gefunden in Zeile: " & suchErgebnis.Row
    Else
       MsgBox "DA IS NIX!"
    End If
  4. Führe Deine gewünschten Aktionen aus: Wenn das Ergebnis nicht Nothing ist, kannst Du mit den gefundenen Daten weiterarbeiten.


Häufige Fehler und Lösungen

  • Fehler 424: Objekt erforderlich: Dieser Fehler tritt auf, wenn Du versuchst, die .Row-Eigenschaft eines Nothing-Objekts zu verwenden. Stelle sicher, dass Du vor der Verwendung der .Row-Eigenschaft überprüfst, ob das Objekt nicht Nothing ist.

  • VBA find nothing: Wenn die Find-Methode nichts findet, gibt sie Nothing zurück. Verwende immer If Not c Is Nothing Then, um zu vermeiden, dass Du mit einem Nothing-Objekt arbeitest.


Alternative Methoden

  1. Verwendung von FindNext: Wenn Du mehrere Vorkommen eines Wertes suchen möchtest, kannst Du die FindNext-Methode verwenden, um in der gefundenen Range weiterzusuchen.

    Dim c As Range
    Set c = Worksheets("WERBER_Ueberschriften").Columns(5).Find(What:=Suchwert)
    If Not c Is Nothing Then
       Dim firstAddress As String
       firstAddress = c.Address
       Do
           ' Aktion mit c
           Set c = Worksheets("WERBER_Ueberschriften").Columns(5).FindNext(c)
       Loop While Not c Is Nothing And c.Address <> firstAddress
    End If
  2. Verwendung von Application.Match: Eine Alternative zur Find-Methode ist die Verwendung von Application.Match, um den Wert zu suchen, ohne ein Range-Objekt zu benötigen.


Praktische Beispiele

Sub BeispielFind()
    Dim suchErgebnis As Range
    Set suchErgebnis = Worksheets("WERBER_Ueberschriften").Columns(5).Find(What:="Suchwert", LookAt:=xlWhole)
    If Not suchErgebnis Is Nothing Then
        MsgBox "Wert gefunden in Zeile: " & suchErgebnis.Row
    Else
        MsgBox "Wert nicht gefunden!"
    End If
End Sub

Dieses Beispiel zeigt, wie Du mit der Find-Methode und der Is Nothing-Überprüfung arbeiten kannst.


Tipps für Profis

  • Verwende Option Explicit: Dadurch wird sichergestellt, dass alle Variablen deklariert sind, was hilft, Fehler wie Object erforderlich zu vermeiden.

  • Verstehe den Unterschied zwischen Objekten und Eigenschaften: Nothing hat keine Eigenschaften. Wenn Du versuchst, auf eine Eigenschaft eines Nothing-Objekts zuzugreifen, wirst Du auf Fehler stoßen.

  • Nutze die Debugging-Funktion: Verwende Debug.Print oder die VBA-Debugger-Tools, um den Wert von Variablen während der Laufzeit zu prüfen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Nothing und einem leeren Objekt?
Nothing bedeutet, dass die Variable kein gültiges Objekt referenziert, während ein leeres Objekt möglicherweise initialisiert, aber noch nicht verwendet wurde.

2. Wie gehe ich mit mehreren gefundenen Werten um?
Verwende die FindNext-Methode in einer Schleife, um durch alle Vorkommen des gesuchten Wertes zu iterieren.

3. Was passiert, wenn ich Find ohne If Not Is Nothing verwende?
Wenn das gefundene Ergebnis Nothing ist und Du versuchst, darauf zuzugreifen, wird ein Laufzeitfehler generiert. Es ist wichtig, den Zustand des Objektes immer zu überprüfen.

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