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

Forumthread: VBA Laufzeitfehler '91': Objektvariable oder W...

VBA Laufzeitfehler '91': Objektvariable oder W...
04.09.2018 21:06:28
Mat
Hallo Experten, ich habe mal wieder ein Problem, was mir einige Nerven kostet.
Ich habe ein Formular angelegt, um neue Datensätze anzulegen. Darin habe ich einige Kombifelder und Textfelder.
Meine Idee ist es, dass ich in einem Kombifeld aus den vorhandenen Datensätzen, einen auswähle und die restlichen Felder auf Basis des gewählten Datensatzes automatisch gefüllt werden. Leider bekomme ich immer folgenden Fehler
Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt
und weiß überhaupt nicht, woher er kommt. Ich hatte den Fehler vorher schonmal, habe anschließend den Code geändert und er war weg. Nun habe ich das Formular an einem anderen Rechner gestartet und der Fehler war wieder da.
Folgend der Code der betreffenden Private Sub.
Wenn der Fehler erscheint, ist die Zeile
ActiveSheet.Range("E3:E1000").Find(What:=slctTest).Select
gelb hinterlegt.
Private Sub cmb_Tests_Change()
'Bildschirmaktualisierung aus
Application.ScreenUpdating = False
Call Name_Ws
slctTest = cmb_Tests.Value
wsData.Activate
'Finden des Eintrags aus dem Kombifeld im Blatt Rohdaten /
'Schreiben der Zeilennummer in Variable
    ActiveSheet.Range("E3:E1000").Find(What:=slctTest).Select
Zeile = ActiveCell.Row()
'Formularfelder füllen
cmb_Prio.Value = Cells(Zeile, 6).Value
txt_Testzeit.Value = Cells(Zeile, 10).Value
txt_Beschreibung1.Value = Cells(Zeile, 38).Value
txt_Beschreibung2.Value = Cells(Zeile, 39).Value
Range("A1").Select
wsCp.Activate
'Bildschirmaktualisierung an
Application.ScreenUpdating = True
End Sub
Ich bin für jeden Tipp dankbar.
Gruß
Mat
Anzeige

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Laufzeitfehler '91': Objektvariable oder W...
04.09.2018 21:46:10
Daniel
Hi
dann wurde dein Suchbegriff slctTest im Suchbereich nicht gefunden und es konnte der anschließende Select-Befehl nicht ausgeführt werden.
Ein Problem in deinem Code ist, dass die .Find-Funktion eine ganze Reihe von Parametern hat (alle eingeabemöglichkeiten, die du in der Menüfunktion SUCHEN hast) und du nur einen einzigen (what) fest vorgibst.
Dabei haben auch die anderen Parameter einen Einfluss darauf, ob der Suchbegriff gefunden werden kann (insbesondere lookat und lookin).
Diese solltest du auf jeden Fall mit angeben.
Anderenfalls wird die Einstellung der zuletzt gemachten Suche des Anwenders verwendet, was dann dazu führen kann, dass es mal funktioniert und mal nicht, je nachdem wie zuletzt gesucht wurde.
Gruß Daniel
Anzeige
AW: VBA Laufzeitfehler '91': Objektvariable oder W...
04.09.2018 22:43:25
onur

dim rng as range
'Finden des Eintrags aus dem Kombifeld im Blatt Rohdaten /
'Schreiben der Zeilennummer in Variable
set rng=ActiveSheet.Range("E3:E1000").Find(What:=slctTest)
ActiveSheet.Range("E3:E1000").Find(What:=slctTest).Select
......

Setze direkt hinter der Zeile mit "Set ..." einen Haltepunkt und lese im Debugger rng aus.
Ich schätze, dass rng leer ist und dein Select-Befehl "ins Leere greift".
Anzeige
AW: VBA Laufzeitfehler '91': Objektvariable oder W...
04.09.2018 23:43:04
Mat
Guten Abend.
Ich danke Euch Beiden wie verrückt. Habe Daniels Tipp beherzigt und die beiden Suchargumente noch angegeben. Seitdem funktioniert alles bestens.
Nochmals Danke und viele Grüße
Mat
AW: VBA Laufzeitfehler '91': Objektvariable oder W...
04.09.2018 22:44:33
onur

dim rng as range
'Finden des Eintrags aus dem Kombifeld im Blatt Rohdaten /
'Schreiben der Zeilennummer in Variable
set rng=ActiveSheet.Range("E3:E1000").Find(What:=slctTest)
ActiveSheet.Range("E3:E1000").Find(What:=slctTest).Select
......

Setze direkt hinter der Zeile mit "Set ..." einen Haltepunkt und lese im Debugger rng aus.
Ich schätze, dass rng leer ist und dein Select-Befehl "ins Leere greift".
Anzeige
AW: VBA Laufzeitfehler '91': Objektvariable oder W...
04.09.2018 22:46:46
onur
Ich meinte natürlich: lies rng aus, wenn der Fehler auftritt (ohne Haltepunkt).
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

VBA Laufzeitfehler '91' beheben: Objektvariable oder With-Blockvariable nicht festgelegt


Schritt-für-Schritt-Anleitung

Um den Laufzeitfehler '91' in Excel VBA zu beheben, folge diesen Schritten:

  1. Überprüfe den Code: Stelle sicher, dass alle Objektvariablen korrekt deklariert sind. Zum Beispiel:

    Dim rng As Range
  2. Setze die Variable: Stelle sicher, dass die Objektvariable mit Set initialisiert wird:

    Set rng = ActiveSheet.Range("E3:E1000").Find(What:=slctTest)
  3. Überprüfe die Rückgabe von Find: Wenn der Suchbegriff nicht gefunden wird, könnte rng leer bleiben. Füge eine Bedingung hinzu, um dies zu überprüfen:

    If Not rng Is Nothing Then
       rng.Select
    Else
       MsgBox "Suchbegriff nicht gefunden!"
    End If
  4. Füge Suchparameter hinzu: Nutze alle verfügbaren Parameter der Find-Funktion, um die Suche zu optimieren:

    Set rng = ActiveSheet.Range("E3:E1000").Find(What:=slctTest, LookIn:=xlValues, LookAt:=xlWhole)
  5. Debugging: Setze Haltepunkte in deinem Code, um den Wert von Variablen während der Ausführung zu überprüfen.


Häufige Fehler und Lösungen

  • Fehler: Laufzeitfehler '91': Objektvariable oder With-Blockvariable nicht festgelegt.

    • Lösung: Überprüfe, ob die Variable korrekt gesetzt wurde und ob der gesuchte Wert existiert.
  • Fehler: ActiveSheet.Range("E3:E1000").Find(What:=slctTest).Select schlägt fehl.

    • Lösung: Füge eine Prüfung ein, ob das Ergebnis von Find nicht leer ist, bevor du Select verwendest.

Alternative Methoden

Falls das Problem weiterhin besteht, kannst du alternative Methoden zur Suche von Werten in Excel VBA in Betracht ziehen:

  1. Verwende Match: Anstatt Find zu verwenden, kannst du auch die Match-Funktion verwenden, um die Zeilennummer zu erhalten:

    Dim Zeile As Long
    Zeile = Application.Match(slctTest, ActiveSheet.Range("E3:E1000"), 0)
  2. Loop durch die Zellen: Du kannst auch durch die Zellen iterieren, um den Suchbegriff zu finden:

    Dim Zelle As Range
    For Each Zelle In ActiveSheet.Range("E3:E1000")
       If Zelle.Value = slctTest Then
           Zelle.Select
           Exit For
       End If
    Next Zelle

Praktische Beispiele

Hier ist ein Beispiel, wie du den Laufzeitfehler '91' vermeiden kannst:

Private Sub cmb_Tests_Change()
    Dim rng As Range
    Application.ScreenUpdating = False
    slctTest = cmb_Tests.Value
    Set rng = ActiveSheet.Range("E3:E1000").Find(What:=slctTest, LookIn:=xlValues, LookAt:=xlWhole)

    If Not rng Is Nothing Then
        rng.Select
        Zeile = rng.Row
        cmb_Prio.Value = Cells(Zeile, 6).Value
        txt_Testzeit.Value = Cells(Zeile, 10).Value
        txt_Beschreibung1.Value = Cells(Zeile, 38).Value
        txt_Beschreibung2.Value = Cells(Zeile, 39).Value
    Else
        MsgBox "Suchbegriff nicht gefunden!"
    End If

    Application.ScreenUpdating = True
End Sub

Tipps für Profis

  • Nutze Error Handling: Integriere Fehlerbehandlung in deinen Code, um Laufzeitfehler zu vermeiden.

    On Error Resume Next
    ' Dein Code hier
    On Error GoTo 0
  • Dokumentiere deinen Code: Füge Kommentare hinzu, um die Funktionalität zu erklären und zukünftige Fehler zu vermeiden.

  • Teste in verschiedenen Umgebungen: Manchmal kann der Code auf einem anderen Rechner fehlerhaft sein, daher teste deinen VBA-Code auf verschiedenen Systemen.


FAQ: Häufige Fragen

1. Was bedeutet Laufzeitfehler '91'? Laufzeitfehler '91' tritt auf, wenn eine Objektvariable oder eine With-Blockvariable nicht festgelegt ist. Das bedeutet, dass du versuchst, auf ein Objekt zuzugreifen, das nicht existiert.

2. Wie kann ich den Laufzeitfehler '91' beheben? Überprüfe, ob die Objektvariable korrekt gesetzt ist und ob der gesuchte Wert existiert. Füge gegebenenfalls Fehlerprüfungen in deinen Code ein.

3. Was sind die häufigsten Ursachen für diesen Fehler? Die häufigsten Ursachen sind das Fehlen von Suchbegriffen, falsche Bereichsangaben oder nicht initialisierte Objektvariablen.

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