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

Fehlerbehandlung

Forumthread: Fehlerbehandlung

Fehlerbehandlung
26.05.2025 22:11:39
Leslie_06
Hallo ,

Bei dem folgenden Code funktioniert die Fehlerbehandlung nicht richtig.
Der erste Laufzeitfehler wird abgefangen. Der zweite dann nicht mehr.
Was ist hier falsch?

Lg. Leslie

Sub Test_Fehler()


Dim bln_X(3) As Boolean
Dim i As Long


On Error GoTo Fehler
For i = 1 To 3
bln_X(i) = "Irgendwas"


Fehler:
If Err.Number > 0 Then
MsgBox " Fehler bei i = " & i & vbCrLf & " Fehlernummer " & Err.Number & " : " & Err.Description, , " Meine Fehler"
Err.Clear
End If

Next


End Sub


Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehlerbehandlung
26.05.2025 22:22:08
daniel
HI
nach einem Fehlersprung befindest du dich im Fehlerbehandlungsmodus.
in diesem Fehlerbehandlungsmodus kann kein weiterer Fehlersprung erfolgen.

Excel erwartet nach so einem Fehlersprung eigentlich die Bebung des Fehlers.
der Fehlerbehandlungsmodus wird mit dem Befehl RESUME aufgehoben.
Dieser fehlt bei dir.

probies mal so:
Sub Test_Fehler()


Dim bln_X(3) As Boolean
Dim i As Long


On Error GoTo Fehler
For i = 1 To 3
bln_X(i) = "Irgendwas"
Next
Exit Sub

Fehler:
MsgBox " Fehler bei i = " & i & vbCrLf & " Fehlernummer " & Err.Number & " : " & Err.Description, , " Meine Fehler"
Resume Next

End Sub


wenn du genauer eingrenzen kannst, wo der Fehler passiert, auch so.
hier macht Excel bei einem Fehler einfach weiter, allerdings wird die Error-Variable err auf den jeweiligen Fehlerwert gesetzt.
dies kannst du abfragen.
die Variable musst du aber selbst wieder zurücksetzen.


Sub Test_Fehler()


Dim bln_X(3) As Boolean
Dim i As Long


On Error Resume Next
For i = 1 To 3
bln_X(i) = "Irgendwas"
If Err > 0 Then
MsgBox " Fehler bei i = " & i & vbCrLf & " Fehlernummer " & Err.Number & " : " & Err.Description, , " Meine Fehler"
Err = 0
End If
Next
On Error GoTo 0

End Sub


Gruß Daniel
Anzeige
AW: Fehlerbehandlung
26.05.2025 23:21:06
Leslie_06
Hallo,

Danke für die schnellen Antworten.

@Daniel :
Mit Resume funktioniert es nicht so wie es soll. Er macht dann dort weiter wo der Fehler aufgetreten ist.
Das darf er nicht. Resume next ist auch nicht praktisch. Im OrginalCode sind mehrere gefährdete stellen.
Da müsste ja hinter jeder dieser Block stehen.
Den Fehler löschen wollte ich eigentlich mit Err.Clear . Err = 0 bringt das gleiche Ergebnis. Der erste Fehler
wird abgefangen, der zweite nicht. Obwohl doch beide identisch sind.
@ Piet :
Exit Sub wäre toll. Da gibt es dann keinen zweiten Fehler. Er soll aber bei Fehler mit dem nächsten Schleifendurchlauf
( Next i ) weiter machen.

Was nun ??
Anzeige
AW: Fehlerbehandlung
27.05.2025 00:01:07
daniel
Resume macht schon das, was es soll.
du musst es halt richtig einsetzten.
es gibt bei Resume im Prinzip drei Varianten.

a) RESUME: springt zurück zur Zeile, die den Fehler verursacht hat, das macht man, wenn man in der Fehlerbehandlung den Fehler korrigiert hat und die Zeile wiederholt werden soll.
b) RESUME NEXT: springt zurück zur nächsten Programmzeile, dh zu der Zeile, die der Zeile folgt die den Fehler verursacht hat
c) RESUME sprungadresse: springt zur angegebenen Adresse.

und bei mehreren gefährdeten Stellen musst du dir was einfallen lassen. Oder mit On Error Resume Next und dann selber den Fehler abfragen.

die Befehle machen schon was sie sollen. Du musst halt auch mal in der Beschreibung nachlesen, was sie machen und dementsprechend deine Programmierung aufbauen.
Anzeige
AW: Fehlerbehandlung
26.05.2025 22:29:21
Piet
Hallo

wenn der Fehler mehrfach aufgerufen werden soll musst du nach der Fehlermeldung -Resume Next- verwenden!
Ich beende die For Next Schleife immer mit Exit Sub! -> dahinter steht die Fehlermeldung mit Resume Next

mfg Piet

Sub Test_Fehler_2()

Dim bln_X(3) As Boolean
Dim i As Long
On Error GoTo Fehler
For i = 1 To 3
bln_X(i) = "Irgendwas"
Next
Exit Sub
Fehler: MsgBox " Fehler bei i = " & i & vbCrLf & " Fehlernummer " & Err.Number & " : " & Err.Description, , " Meine Fehler"
Resume Next
End Sub
Anzeige
AW: Fehlerbehandlung
26.05.2025 23:48:45
Ulf
Hi,
bau's defensiv
Option Explicit


Sub Test_Fehler_2()
Dim bln_X(3) As Boolean
Dim i As Long
For i = 1 To 3
'bln_X(i) = "Irgendwas"
If setValues(bln_X(i), "Irgendwas") Then
'Weiter
Else
'Fehler
End If
Next
End Sub

Public Function setValues(ByRef bIn, ByVal strIn) As Boolean
On Error GoTo setValuesERR
Dim bRet As Boolean
bIn = strIn
bRet = True
setValuesOUT:
setValues = bRet
Exit Function
setValuesERR:
bRet = False
Resume setValuesOUT
End Function

hth
Ulf
Anzeige
AW: Fehlerbehandlung
27.05.2025 00:15:25
Leslie_06
Hallo,
ihr seid superschnell hier.
@ Ulf
Das wäre sicher eine Möglichkeit. Bleibt trotzdem die Frage, warum der Fehler beim ersten auftreten abgefangen wird,
und beim zweiten mal dann nicht mehr. Das muss doch einen Grund haben.

@ Daniel
Kannst du mir noch zeigen wie ich das Resume so einsetzte, dass bei Fehler die For-Next-Schleife mit dem nächsten Zähler
fortgesetzt wird ? Ich habe damit schon etwas erfolglos herum probiert.
Anzeige
AW: Fehlerbehandlung
27.05.2025 02:16:38
Daniel
Du musst dem Resume eine Rücksprungadresse mitgeben
Die Fehlerroutine muss ganz am Ende des Makros stehen.

Sub Test_Fehler()


Dim bln_X(3) As Boolean
Dim i As Long


On Error GoTo Fehler
For i = 1 To 3
bln_X(i) = "Irgendwas"
' ...hier weitere Code
Rücksprung:
Next
On Error Goto 0
'... Hier weiterer Code

Exit Sub

Fehler:
MsgBox " Fehler bei i = " & i & vbCrLf & " Fehlernummer " & Err.Number & " : " & Err.Description, , " Meine Fehler"
Resume Rücksprung

End Sub
Anzeige
AW: Fehlerbehandlung
27.05.2025 13:35:28
Piet
Hallo Leslie

ich sage ganz höflich, du hast mein Programm NICHT getestet. Es macht was es soll, zeigt dir DREI Fehler an.
Exit Sub steht HINTER For Next, nicht IN der For Next Schleife. Man beachte den feinen Unterschied!
Es gibt viele gutgemeinte Ratschläge, aber das alte Excel 95/97 funktioniert immer noch einwandfrei!

mfg Piet
Anzeige
AW: Fehlerbehandlung
27.05.2025 22:05:39
Leslie_06
Hallo,

Danke für die Unterstützung. Ich nutze jetzt Daniels Version.
@Piet - Richtig, in deiner Testversion werden auch alle Fehler abgefangen.

Lg. Leslie
Anzeige
Anzeige
Live-Forum - Die aktuellen Beiträge
Datum
Titel
14.05.2026 13:31:09
14.05.2026 09:50:42
13.05.2026 19:14:18