Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
Anzeige
Archiv - Navigation
1276to1280
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
Fehler abfangen mit VBA
25.09.2012 22:45:09
Carlo
Hallo Zusammen,
Ich habe mehrere Funktionen geschrieben, die nach einander ohne direkten Zusammenhang bei einem Klick auf einen Button laufen lasse. Wie im folgenden Beispiel:
Sub Test ()
On error goto Fehler
Call Sub1
Call Sub2
Call Sub3
Exit Sub
Fehler:
MsgBox "Fehler"
End Sub
Wenn ich nun einen Fehler im Sub1 habe wird mir zwar die Fehlermeldung in dieser Funktion angezeigt, aber Sub2 und Sub3 wird trotzdem ausgeführt. Ausserdem wird dieser Fehler im Sub Test leider auch nicht abgefangen, sondern läuft ohne Fehler durch. Wie kann ich das programmieren, dass bei einem Fehler die nachfolgenden Sub's nicht mehr ausgeführt werden? Gibt es da eine Möglichkeit?
Vielen Dank und Herzliche Grüsse Carlo

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Fehler abfangen mit VBA
26.09.2012 00:45:23
Matze,Matthias
Hallo carlo,
schau doch mal wo du deine On Error einsetzt.
Na? vor dem Makroaufruf. Und enden? hinter den Makroaufrufen.
Matze

AW: Fehler abfangen mit VBA
26.09.2012 11:07:42
Carlo
Hallo Matze
Ich weiss nicht genau, was du mit dem Anfang und Ende von On error meinst. Im Sub Test fängt ja der On error vor dem 1. Call von Sub 1 an und der Exit Sub ist nach Aufruf von Sub3. In den Sub 1-3 beginnt der On error auch vor dem Makro und endet danach. Kannst du mir vielleicht ein Beispiel zu deiner Antwort geben?
Herzlichen Dank und Gruss Carlo

AW: Fehler abfangen mit VBA
26.09.2012 01:55:09
fcs
Hallo Carlo,
wandle deine Subs in Functions die als Ergebnis einen Boolschen Wert zurückgeben.
In den Functions machst du dann entsprechende Fehlerprüfungen mit Fehlermeldung.
Bei Fehler in der Function wird deren Ergebniswert-Wert auf True gesetzt.
In der Hauptroutine ist der Aufruf dann:
If Function1 = True then Exit Sub ' oder Goto Fehler
Gruß
Franz

Anzeige
AW: Fehler abfangen mit VBA
26.09.2012 11:13:48
Carlo
Hallo Franz
Vielen Dank für deine Antwort. Ich habe, dass nun folgendermassen gelöst:

Public Function F1 () as boolean
On error goto Fehler:
Makro
Exit Sub
Fehler:
F1 = true
Msgbox "Fehlermeldung"
Sub Test()
If F1 = true then
Exit Sub
Else
F1
End if
If F2 = True then
etc..
End sub
Stimmt das in etwa so? oder kann man dies noch besser lösen?
Herzlichen Dank und Gruss Carlo

AW: Fehler abfangen mit VBA
26.09.2012 12:01:20
fcs
Hallo Carlo,
Code sollte etwa wie folgt sein.
Die Fehlerbehandlung kann man auch etwas verfeinern und je nach Fehler-Nr. evtl. auch Korrekturen einbauen, um die Function mit einer Resume-Anweisung fortzusetzen.
Gruß
Franz
Public Function F1() As Boolean
On Error GoTo Fehler:
Makro
Err.Clear
Fehler:
With Err
Select Case .Number
Case 0 'Alles OK
Case 99999
Case Else
F1 = True
MsgBox "Fehler-Nr: " & Err.Number & vbLf & Err.Description, _
vbInformation + vbOKOnly, "Fehler Function F1"
End Select
End With
End Function
Sub Test()
If F1 = True Then Exit Sub
If F2 = True Then Exit Sub
'etc..
End Sub

Anzeige
AW: Fehler abfangen mit VBA
26.09.2012 11:33:09
Tino
Hallo,
eine Variante bei Subs wäre eine Variable mit zu übergeben.
Im Beispiel ist es eine Variable vom Typ String, die ich mit dem entsprechenden Fehlertext fülle.
Die Variable muss ByRef übergeben werden (ist Standard, aber für Demo angegeben)
Sub Start()
Dim strFehler$

Call Sub1(strFehler): If strFehler <> "" Then GoTo ErrorText
Call Sub2(strFehler): If strFehler <> "" Then GoTo ErrorText
Call Sub3(strFehler): If strFehler <> "" Then GoTo ErrorText

ErrorText:
If strFehler <> "" Then MsgBox strFehler, vbCritical
End Sub

Sub Sub1(ByRef strFehler$)
On Error GoTo ErrorH
Range("A1").Value = 1
Exit Sub
ErrorH:
strFehler = "Fehler in Sub1!" & vbCr & vbCr & Err.Number & vbCr & vbCr & Err.Description
End Sub

Sub Sub2(ByRef strFehler$)
On Error GoTo ErrorH
Range("A0").Value = 10 'Beispiel Fehler 
Exit Sub
ErrorH:
strFehler = "Fehler in Sub2!" & vbCr & vbCr & Err.Number & vbCr & vbCr & Err.Description
End Sub

Sub Sub3(ByRef strFehler$)
On Error GoTo ErrorH
Range("A2").Value = 2
Exit Sub
ErrorH:
strFehler = "Fehler in Sub3!" & vbCr & vbCr & Err.Number & vbCr & vbCr & Err.Description
End Sub
Gruß Tino
Anzeige

133 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige