Fehler abfangen in VBA (Excell)

Hallo Zusammen,

ich habe mir ein nettes Makro geschrieben, mit dessen Hilfe ich in einer Datenbank nach Artikelnnummern suchen kann. Ist diese im Artikelstamm gefunden kopiert er aus den Stammdaten die beiden Felder links der Artikelnummer in eine extra Liste.

Funktioniert sehr gut, bin richtig stolz drauf *grins*

Jetzt habe ich nur das Problem, dass ich einen
-„Runtime Error '91“ Object variable or With block variable not set-
Fehler bekomme, sobald eine gesuchte Artikelnummer nicht im Artikelstamm ist.

Kennt jemand von Euch eine Möglichkeit diesen Fehler abzufangen, sodass das Makro einfach mit der nächsten Nummer weitermacht und diese frei läßt?

Ist hier vielleicht etwas schwer zu beschreiben, ich kann das File auch gerne per Mail versenden, wenn mal jemand reinschauen möchte. Ist kein Geheimnis.

Vielen Dank schon mal

Gruß

MARC

Hallo Marc.

Versuche es mal mit diesem Code-Fragment, das Du bitte als erste Zeile in die Prozedur einfügst:

On Error Resume Next

Viele Grüße
Carsten

Hallo,

meinst du wirklich Makro oder VBA-Routine?

Beim Makro wird das etwas schwierig, da die verarbeitung einfach TOP-DOWN erfolgt ohne wirklich moegliche Verzweigungen.

Beim VBA gint es halt die OnError Varinate

Pub Function ff()
On Error goto ErrHere

‚‘
‚‘ ProgrammCode Block
‚‘
‚‘
‚‘
‚‘
ExitHere:
Exit Funktion

ErrHere:

select case err.Number
case 91

’ hier anweisungen fuer erneutes lesen


’ ruecksprung in Prozedur mit goto… nicht elegant aber wirksam
case else
MsgBox err.Decsription & " " & err.number
resume ExitHere
end select

end Function

so in etwa

Tschau
Peter

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo.

On Error Resume Next

bedeutet natürloch, dass alle auffangbaren Fehler meldungslos geschluckt werden. Das kann sinnvoll sein, wenn die Funktion oder Prozedur nicht komplex genug ist, dass andere Fehler auftreten können. Ansonsten aber verbaut man sich damit die Möglichkeit, differenziert auf Fehler zu reagieren - und sie (in der Entwicklungsphase) überhaupt ermitteln zu können.

Sinnvoller ist m.E.

On Error Goto ERROR_HANDLING

zu schreiben und dann etwas in dieser Art zu bosseln :

Sub Haumichplatt()
Dim dieses und jenes
On Error GoTo ERROR_HANDLING
[Codecodetrallala]
Exit Sub
ERROR_HANDLING :
If Err.Number=91 Then 'das war die originale Fehlernummer
Resume Next
End If
MsgBox Err.Description+VbNewLine+VbNewLine+ _
Str$(Err.Number)
Resume Next
End Sub

Damit werden alle anderen Fehler weiterhin mit Nummer und Beschreibung angezeigt.

Gruß Eillicht zu Vensre

Super :wink:
Ein Traum,

jetzt läuft meine Routine (kein Makro, ich lerne dazu)

Vielen Dank

MARC

Hallo Eillicht zu Vensre.

Jaja, das ist ja auch alles richtig was Du sagst, aber er wollte ja, das der Fehler übersprungen wird, sofern das Gesuchte nicht gefunden wurde. Ich behaupte mal, er durchsucht seine Liste mit einer Schleife und wenn die dann irgendwann zuende ist, aber nichts gefunden wurde, kann er ja 'ne Meldung anzeigen.
Ich halte es für besser, mögliche Fehler in einer Schleife zu überspringen.

Viele Grüße
Carsten