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

Forumthread: VBA Find

VBA Find
08.06.2017 16:39:54
Dominik
Guten Tag,
ich habe ein Problem bei einem Programm.
Set Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(Suchdatum, LookIn:=xlValues).Row
Bei Ausführung dieses Programmteil bekomme ich jedoch einen Fehler angezeigt:
Laufzeitfehler 91: Objektvariable oder With-Blockvariable nicht festgelegt.
Diese Programmzeile soll mir die Zeilenzahl angeben, in der das Suchdatum gefunden wurde.
(ohne ".Row" funktioniert die Programmzeile, gibt jedoch nur den Inhalt des gefundenen Feldes, also das Suchdatum, zurück)
Ich hoffe ihr könnt mir Helfen.
Dominik
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Find
08.06.2017 16:43:17
Hajo_Zi
Hallo Dominik,
hast Du Ergebnis auch als Long definiert?

AW: VBA Find
08.06.2017 16:49:52
Dominik
Hallo Hajo
Wenn ich Ergebnis2 vorher dimensioniere erscheint der Fehler: "Fehler beim kompilieren, Objekt erforderlich".
Der komplette Programmcode:
Suchdatum = Worksheets("Controlling").Cells(2, 12).Value
MsgBox (Suchdatum)
Set Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(Suchdatum, LookIn:=xlValues).Row
If Ergebnis2 Is Nothing Then
MsgBox ("nicht gefunden")
Else
MsgBox (Ergebnis2)
End If

Dominik
Anzeige
AW: VBA Find
08.06.2017 16:53:13
Hajo_Zi
Halo Dominik,
bei dem Code muss .row fort.
Es ist nicht der komplette Code.
Die Dimensionierung für ohne Row kennst Du ja.
Meine Tipps willst Du ja nicht umsetzen.
Ich bin dann raus.
Gruß Hajo
Anzeige
AW: VBA Find
08.06.2017 16:55:42
mmat
Ergebnis2 ist irgendeine Zahl, kein Range.
"Set" bitte weglassen
Option Explicit
Sub test()
Dim ergebnis2 As Integer
ergebnis2 = Worksheets("Tabelle1").Range("E:E").Find("warum", LookIn:=xlValues).Row
Debug.Print ergebnis2
End Sub

AW: VBA Find
08.06.2017 17:02:48
Dominik
Wenn ich das so umsetze bekomme ich den Laufzeitfehler 91.
Sub test()
Suchdatum = Worksheets("Controlling").Cells(2, 12).Value
MsgBox (Suchdatum)
Dim Ergebnis2 As Integer
Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(Suchdatum, LookIn:=xlValues).Row
Debug.Print Ergebnis2
End Sub
Beim debuggen verweist Excel auf die Zeile mit dem .Row am Ende
Oder habe ich das falsch umgesetzt?
Dominik
Anzeige
AW: VBA Find
08.06.2017 17:33:05
mmat
Sorry, das kann ich jetzt auf die schnelle nicht nachvollziehen.
Das von mir gepostete Muster ist getestet. In der "Tabelle1" gibt's irgendwo in der Spalte E eine Zelle mit dem Text "warum". Die Zeile dieser Zelle wird im Debug-Bereich ausgegeben.
Muß jetzt leider weg.
vg, MM
AW: VBA Find
08.06.2017 17:34:41
Nepumuk
Hallo Dominik,
so geht das:
Sub test()
    Dim Ergebnis2 As Range
    Dim Suchdatum As Date
    
    Suchdatum = Worksheets("Controlling").Cells(2, 12).Value
    MsgBox (Suchdatum)
    
    Set Ergebnis2 = Worksheets("Controlling").Columns(2).Find(What:=Suchdatum, LookIn:=xlValues)
    
    If Ergebnis2 Is Nothing Then
        MsgBox "Nix gefunden"
    Else
        MsgBox Ergebnis2.Row
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: VBA Find
08.06.2017 17:38:48
Dominik
Okay, das funktioniert tadellos.
Vielen Dank :-)
Wobei ich jetzt allerdings noch nicht ganz verstanden habe wo der Fehler genau lag.
Könntest du mir das erklären?
AW: VBA Find
08.06.2017 17:44:36
Nepumuk
Hallo Dominik,
die Find-Methode gibt ein Range-Objekt zurück, aber nur wenn etwas gefunden wurde. Wird nichts gefunden gibt die Methode Nothing zurück und .Row von Nothing gibt nun mal den Fehler 91 - Object variable not set.
Gruß
Nepumuk
Anzeige
AW: VBA Find
08.06.2017 17:45:39
Dominik
Dankeschön :-)
;

Forumthreads zu verwandten Themen

Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige

Infobox / Tutorial

VBA Find: Fehlerbehebung und praktische Anwendungen


Schritt-für-Schritt-Anleitung

  1. Variablen deklarieren: Stelle sicher, dass alle benötigten Variablen korrekt deklariert sind. Zum Beispiel sollte Ergebnis2 als Range deklariert werden, wenn du die .Row-Eigenschaft verwenden möchtest.

    Dim Ergebnis2 As Range
  2. Suchdatum festlegen: Hole dir den Wert, den du suchen möchtest, aus einer Zelle.

    Dim Suchdatum As Date
    Suchdatum = Worksheets("Controlling").Cells(2, 12).Value
  3. Die Find-Methode anwenden: Verwende die Find-Methode, um den Wert in einem bestimmten Bereich zu suchen.

    Set Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(What:=Suchdatum, LookIn:=xlValues)
  4. Überprüfen, ob das Ergebnis gefunden wurde: Stelle sicher, dass du überprüfst, ob Ergebnis2 Nothing ist, bevor du versuchst, die .Row-Eigenschaft zu verwenden.

    If Ergebnis2 Is Nothing Then
       MsgBox "Nicht gefunden"
    Else
       MsgBox Ergebnis2.Row
    End If

Häufige Fehler und Lösungen

  • Laufzeitfehler 91: Dieser Fehler tritt auf, wenn das gesuchte Objekt nicht gefunden wird und du versuchst, die .Row-Eigenschaft eines Nothing-Objekts zu verwenden. Stelle sicher, dass du die Variable Ergebnis2 überprüfst, bevor du darauf zugreifst.

  • Objektvariable nicht festgelegt: Wenn du versuchst, eine Variable zu setzen, die nicht deklariert ist oder nicht korrekt zugewiesen wurde, erhältst du diesen Fehler. Achte darauf, dass du die korrekten Datentypen verwendest.


Alternative Methoden

  • Verwendung von Cells.Find: Anstatt nur Range.Find zu verwenden, kannst du auch Cells.Find verwenden, um in einem spezifischen Bereich zu suchen.

    Set Ergebnis2 = Worksheets("Controlling").Cells.Find(What:=Suchdatum, LookIn:=xlValues)
  • Suchoptionen anpassen: Du kannst zusätzliche Parameter wie LookAt, SearchOrder und MatchCase nutzen, um die Suche zu verfeinern.

    Set Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(What:=Suchdatum, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)

Praktische Beispiele

  1. Einfaches Finden:

    Sub BeispielEinfachFinden()
       Dim Ergebnis2 As Range
       Set Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(What:="Testwert", LookIn:=xlValues)
       If Not Ergebnis2 Is Nothing Then
           MsgBox "Wert gefunden in Zeile: " & Ergebnis2.Row
       End If
    End Sub
  2. Suchen und Ersetzen:

    Sub BeispielSuchenErsetzen()
       Dim Suchwert As String
       Dim Ergebnis2 As Range
       Suchwert = "Altwert"
       Set Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(What:=Suchwert, LookIn:=xlValues)
       If Not Ergebnis2 Is Nothing Then
           Ergebnis2.Value = "Neuwert"
       End If
    End Sub

Tipps für Profis

  • Fehlerbehandlung: Füge Fehlerbehandlungsroutinen hinzu, um sicherzustellen, dass dein Code robust ist.

    On Error Resume Next
    Set Ergebnis2 = Worksheets("Controlling").Range("B:B").Find(What:=Suchdatum, LookIn:=xlValues)
    On Error GoTo 0
  • Performance optimieren: Begrenze den Suchbereich, wenn möglich, um die Performance zu steigern, anstatt die gesamte Spalte zu durchsuchen.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen Set und nicht Set bei der Find-Methode?
Set wird verwendet, wenn du ein Objekt (z.B. Range) zuweisen möchtest. Wenn du nur einen Wert zuweisen willst, benötigst du Set nicht.

2. Wie kann ich die Suche auf Groß- und Kleinschreibung achten lassen?
Setze das Argument MatchCase auf True in der Find-Methode.

3. Was passiert, wenn der gesuchte Wert nicht gefunden wird?
Die Find-Methode gibt Nothing zurück, und du solltest deinen Code so gestalten, dass er dies berücksichtigt, um Laufzeitfehler zu vermeiden.

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