Frage zu IsError

Bild

Betrifft: Frage zu IsError
von: Georg Hoffmann
Geschrieben am: 25.05.2015 18:42:57

Liebe Excellenzen,
ich vergleiche 2 Tabellen. Dabei Suche ich nach einer ID die in einer bestimmten Spalte steht. WEnn diese nicht in der zweiten Tabelle gefunden wird dann läuft XL auf einen Fehler. Diesen Fehler benötige ich weil es danach unterschiedlich weitergehen soll.
Ich habe folgendes versucht:
...
If IsError(Sheets("Termine").Range("L2:L5000").Find(Sheets("TermineGestern").Cells(i, 12).Value, LookIn:=xlValues)) Then
GoTo Weiter
Else
x = Sheets("Termine").Range("l2:L5000").Find(Sheets("TermineGestern").Cells(i, 12).Value, LookIn:=xlValues).Row
End If
Weiter:
....
Leider erfolgt aber bei einem Fehler (nicht in beiden Blättern ist die ID vorhanden) kein Sprung zu "Weiter".
Warum ist das so und wie mache ich es besser?
LG Georg

Bild

Betrifft: AW: Frage zu IsError
von: Sepp
Geschrieben am: 25.05.2015 18:46:43
Hallo Georg,
mit GoTo arbeitet man nicht, bzw. nur in Ausnahmesituationen (Fehlerbehandlung)
Dim rng As Range
Set rng = Sheets("Termine").Range("L2:L5000").Find(Sheets("TermineGestern").Cells(i, 12).Value, LookIn:=xlValues)
If rng Is Nothing Then 'nicht gefunden
'...
Else
'...
End If
Gruß Sepp

Bild

Betrifft: AW: Frage zu IsError
von: Georg Hoffmann
Geschrieben am: 25.05.2015 19:09:32
Hallo Sepp,
ja, das funktioniert prima. Danke.
Ich habe gedacht, dass so ja zuerst schon der Fehler verursacht wird und dass dann die Fehlerbehandlung in der Folgezeile schon zu spät ist. Ich dachte auch ,dass dich das schon ausprobiert habe, allerdings hatte ich da das rng nicht deklariert. Spielt das eine Rolle?
LG und nochmals Danke
Georg

Bild

Betrifft: AW: Frage zu IsError
von: Sepp
Geschrieben am: 25.05.2015 19:20:01
Hallo georg,
.Find verursacht erstmal keinen Fehler, wenn nichts gefunden wird, wenn du allerdings mit der nicht vorhandenen Funstelle etwas anstellen willst, dann kommt logischerweise der Fehler.
rng wird als Range deklariert und bei erfolgreicher Suche über .Find die entsprechende Zelle zugewiesen, wenn nichts gefunden wird, dann bleibt rng eben Nothing und das können wir abfragen.
Gruß Sepp

Bild

Betrifft: AW: Frage zu IsError
von: Georg Hoffmann
Geschrieben am: 25.05.2015 19:22:52
Hallo Sepp,
o.k. hab ich (hoffentlich) verstanden.
Ein Fehler wird es erst wenn ich z.B. schreibe:
x = find.irgendwas
Wenn es dann nicht gefunden wird gibt's ne Fehlermeldung.
Deine Lösung funktioniert prima - vielen Dank nochmals!
LG Georg

Bild

Betrifft: …weil .Find hier keinen Fehler liefert, sondern …
von: Luc:-?
Geschrieben am: 25.05.2015 19:37:58
…ein undefiniertes Objekt Nothing, Georg,
weshalb Sepps Herangehen hier das richtige ist. Ansonsten wäre es richtig, wie du IsError eingesetzt hast, denn die 1.Anweisung, in der ein Fehler auftritt, wird auch zuerst wirksam! Ein Fehler könnte hier aber nur auftreten, wenn es die Blätter u/o Bereiche nicht gäbe.
Übrigens ist es richtig, dass man GoTo nach Möglichkeit vermeiden sollte, es ist aber kein Muss, sondern orientiert sich an Pgmier­Spra­chen, die solch einen Befehl nicht enthalten. Die folgen idR aber auch einer wesentlich komple­xeren Logik, die genügend Alter­nativen bereit­stellt. In VBA reicht es, diesen Befehl nicht infla­tionär zu verwenden, damit kein sog Spaghett-Code entsteht. Man muss den Befehl aber auch nicht unbedingt vermeiden wollen, vor allem dann nicht, wenn dadurch das Pgm unüber­sicht­licher wdn würde als mit einem geschickt einge­setzten [On … ]GoTo bzw [On … ]GoSub. Das muss dann auch nicht mal vor einer Fehler­behand­lungs­rou­tine sein, denn auch das kann meist vermieden wdn.
Gruß, Luc :-?

Bild

Betrifft: AW: …weil .Find hier keinen Fehler liefert, sondern …
von: Georg Hoffmann
Geschrieben am: 25.05.2015 21:42:32
Hallo Luc,
o.k. verstanden. LG und Danke für die Erläuterung.
Jetzt läuft alles wie gewünscht *hoffentlichnichtzufrühfreu*
LG Georg

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Makros nacheinander ausführen"