Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1520to1524
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Fehlerbehandlung in Schleifen

Fehlerbehandlung in Schleifen
03.11.2016 12:29:50
Kieks
Hallo liebes Forum,
ich habe in einem etwas längeren Code ein Problem mit der Fehlerbehandlung in einer Schleife. Zur Übersichtlichkeit habe ich es das Problem in wenigen Zeilen reproduziert.
Es geht darum, dass ich gerne auf einen bestimmten Fehler in einer Schleife reagieren möchte. Die Schleife soll danach weiterlaufen und die Fehlerbehandlung weiterhin aktiviert sein.
Im folgenden Code sollte eigentlich 5 Mal die 0 ausgegeben werden, weil ich möchte, dass die ausnahme die Variable auf 0 setzt, wenn es zur Division durch 0 kommt. Aber nachdem das beim ersten Mal für k = 1 noch funktioniert, funktionert es für k = 2 nicht mehr.

Sub test1()
Dim k As Integer
Dim i As Long
For k = 1 To 5
On Error GoTo ausnahme
i = k / 0
ausnahme: If Err.Number = 11 Then i = 0
MsgBox i
Next k
End Sub


Kann mir jemand sagen, woran das liegt und ob man das beheben kann?
Vielen Dank und liebe Grüße
Kieks

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlerbehandlung in Schleifen
03.11.2016 12:48:07
AlterDresdner
Hallo Kieks,
so weit ich das sehe, wird bei Dir der Fehler nicht behandelt und 'kommt also wieder zum Vorschein'. Mit
Sub test1()
Dim k As Integer
Dim i As Long
For k = 1 To 5
On Error GoTo ausnahme
i = k / 0
Next k
Exit Sub
ausnahme: If Err.Number = 11 Then i = 0
MsgBox i
Resume Next
End Sub

funktioniert das, was Du wohl eigentlich wolltest. Eine andere Möglichkeit wäre mit
On Error resume Next den Fehler schlicht zu übergehen und nach der kritischen Operation Err.Number zu testen :
Sub test1()
Dim k As Integer
Dim i As Long
For k = 1 To 5
On Error Resume Next
i = k / 0
If Err.Number = 11 Then
i = 0
MsgBox i
End If
Next k
End Sub

Gruß der Alte Dresdner
Anzeige
AW: Fehlerbehandlung in Schleifen
03.11.2016 12:59:57
Kieks
Wow, so schnell so viele Antworten. Vielen Dank an alle!
Ich habe es mit deinem zweiten Vorschlag versucht. Habe den Fehler erst mit On Error Resume Next übergangen und dann auf den kritischen Fehler überprüft. Das hat super funktioniert.
Die weiteren Anregungen schaue ich mir auf jeden Fall auch noch an.
Das Problem ist aber schonmal gelöst! Vielen Dank!
AW: Fehlerbehandlung in Schleifen
03.11.2016 12:48:54
Daniel
Hi
das Problem ist, wenn der Fehlersprung einmal ausgeführt wurde, befindet sich VBA im Fehlerbehandlungsmodus und in diesem ist kein weiterer Fehlersprung mehr möglich, dazu muss der Fehlerbehandlungsmodus erst wieder beendet werden, was bspw mit dem Befehl "Resume" oder "Resume Next" passiert.
das könnte als Code dann so aussehen:

Sub test1()
Dim k As Integer
Dim i As Long
On Error GoTo ausnahme
For k = 1 To 5
i = k / 0
MsgBox i
Next k
On Error GoTo 0
Exit Sub
ausnahme:
If Err.Number = 11 Then i = 0
Resume Next
End Sub

Eine etwas andere Lösungsmehthode für das Problem könnte so aussehen:
Sub test2()
Dim k As Integer
Dim i As Long
On Error Resume Next
For k = 1 To 5
Err.Number = 0
i = k / 0
If Err.Number = 11 Then i = 0
MsgBox i
Next k
On Error GoTo 0
End Sub
was jetzt besser ist, hängt von der konkreten Aufgabenstellung ab.
Gruß Daniel
Anzeige
AW: Fehlerbehandlung in Schleifen
03.11.2016 12:56:41
UweD
so?
Sub test1()
    Dim k As Integer
    Dim i As Long
 
    On Error Resume Next
    For k = 1 To 5
        i = k / 0
        If Err.Number = 11 Then i = 0
        MsgBox i
    Next k
    On Error GoTo 0
End Sub

LG UweD
Anzeige
AW: Fehlerbehandlung in Schleifen
03.11.2016 12:59:37
Michael
Hi Kieks,
so geht's:
Option Explicit
Function wieIsses(ByVal k&, ByVal w0&)
Dim i
On Error Resume Next
i = k / w0
If Err.Number = 11 Then wieIsses = 0 Else wieIsses = i
On Error GoTo 0
End Function
Sub test1()
Dim k As Integer
For k = 1 To 5
MsgBox wieIsses(k, 0)
Next k
End Sub
Falls es wirklich nur die DIV/0 ist, würde ich einfach den Wert vorher abfragen, das sollte schneller gehen als das error-handling.
Schöne Grüße,
Michael
AW: Fehlerbehandlung in Schleifen
03.11.2016 13:01:01
Kieks
Hallo Michael,
ne, es ging um einen etwas komplexeren Fehler, Div0 war nur ein Beispiel. Vielen Dank für die Lösung!
Anzeige
gerne, aber siehe andere Vorschläge
03.11.2016 13:51:35
Michael
Kieks,
das resume Next hatte ich nicht innerhalb der Sub probiert, es geht ja aber in den anderen Vorschlägen auch ohne eine Function.
Eine Function hat aber in manchen Situationen gewisse Vorzüge: die Geschichte ist gekapselt, und man kann (wenn Variant) auch z.B. false oder -1 zurückgeben: das kann u.U. griffiger ausgewertet werden.
Happy Exceling,
Michael

300 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige