Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Fehler abfangen mit VBA

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

Anzeige

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

Anzeige
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

Anzeige
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
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Entdecke relevante Threads

Schau dir verwandte Threads basierend auf dem aktuellen Thema an

Alle relevanten Threads mit Inhaltsvorschau entdecken
Anzeige
Anzeige

Infobox / Tutorial

Fehler abfangen mit VBA


Schritt-für-Schritt-Anleitung

Um Fehler in deinen VBA-Prozeduren abzufangen, kannst du die On Error Anweisung verwenden. Hier ist eine einfache Schritt-für-Schritt-Anleitung:

  1. Fehlerbehandlung aktivieren: Setze On Error GoTo Fehler am Anfang deiner Prozedur, um Fehler abzufangen.
  2. Fehlerbehandlungsroutine erstellen: Definiere einen Fehlerblock, der ausgeführt wird, wenn ein Fehler auftritt.
  3. Fehlerstatus überprüfen: Verwende If Err.Number <> 0 Then, um zu überprüfen, ob ein Fehler aufgetreten ist.
  4. Fehlernachricht ausgeben: Zeige eine Fehlermeldung mit MsgBox an, um den Benutzer über den Fehler zu informieren.

Hier ein Beispiel:

Sub Beispiel()
    On Error GoTo Fehler
    ' Dein Code hier
    Exit Sub
Fehler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
End Sub

Häufige Fehler und Lösungen

  • Fehler wird nicht abgefangen: Stelle sicher, dass die On Error Anweisung vor dem Code steht, der einen Fehler verursachen könnte.

  • Nachfolgende Subs werden ausgeführt: Um zu verhindern, dass nach einem Fehler weitere Funktionen ausgeführt werden, kannst du die Prozedur mit Exit Sub beenden.

  • Fehlermeldung wird nicht angezeigt: Wenn du On Error Resume Next verwendest, wird der Fehler ignoriert. Nutze stattdessen On Error GoTo, um Fehler zu erfassen.


Alternative Methoden

Eine alternative Methode zur Fehlerbehandlung ist die Verwendung von Funktionen, die einen booleschen Wert zurückgeben. Hier ein Beispiel:

Public Function F1() As Boolean
    On Error GoTo Fehler
    ' Dein Code
    F1 = False
    Exit Function
Fehler:
    F1 = True
    MsgBox "Fehler: " & Err.Description
End Function

Sub Test()
    If F1 Then Exit Sub
    ' Weitere Logik
End Sub

Diese Methode ermöglicht eine präzise Fehlerbehandlung in jeder Funktion.


Praktische Beispiele

Hier sind einige praktische Beispiele für das Abfangen von Fehlern in VBA:

  1. Fehler bei Division durch Null abfangen:
Sub Division()
    On Error GoTo Fehler
    Dim Ergebnis As Double
    Ergebnis = 10 / 0 ' Dies wird einen Fehler verursachen
    Exit Sub
Fehler:
    MsgBox "Division durch Null ist nicht erlaubt."
End Sub
  1. Multiple Subs mit Fehlerbehandlung:
Sub Start()
    Dim strFehler As String
    Call Sub1(strFehler)
    If strFehler <> "" Then GoTo ErrorText
    Call Sub2(strFehler)
    If strFehler <> "" Then GoTo ErrorText
    Exit Sub
ErrorText:
    MsgBox strFehler, vbCritical
End Sub

Sub Sub1(ByRef strFehler As String)
    On Error GoTo Fehler
    ' Code hier
    Exit Sub
Fehler:
    strFehler = "Fehler in Sub1: " & Err.Description
End Sub

Tipps für Profis

  • Verwende spezifische Fehlercodes: Bei der Fehlerbehandlung kannst du gezielt auf bestimmte Fehlernummern reagieren, um differenzierte Fehlermeldungen anzuzeigen.

  • Nutze Err.Clear: Setze Err.Clear nach der Fehlerbehandlung, um den Fehlerstatus zurückzusetzen.

  • Verwende Resume Next: Um den Code nach einem Fehler an einer bestimmten Stelle fortzusetzen, kannst du Resume verwenden. Dies sollte jedoch mit Bedacht eingesetzt werden.


FAQ: Häufige Fragen

1. Wie kann ich eine Fehlermeldung anpassen?
Du kannst die Fehlermeldung in der MsgBox anpassen, indem du den Err.Description verwendest, um spezifische Informationen über den Fehler anzuzeigen.

2. Was ist der Unterschied zwischen On Error Resume Next und On Error GoTo?
On Error Resume Next ignoriert den Fehler und fährt mit dem nächsten Befehl fort, während On Error GoTo zu einem definierten Fehlerblock springt, wo du den Fehler verarbeiten kannst.

3. Kann ich Fehler in Access VBA genauso abfangen?
Ja, die Methoden zur Fehlerbehandlung in Access VBA sind identisch zu denen in Excel VBA. Du kannst On Error Anweisungen verwenden, um Fehler zu handhaben.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige