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

On Error Resume Next

Forumthread: On Error Resume Next

On Error Resume Next
Ximena
Hallo ihr Lieben
Ich habe ein Makro und dies wird von anderen Leuten benutzt, die keine Ahnung von VBA haben. Deshalb möchte ich "On Error Resume Next" einbinden, damit die Leute gar nie einen Laufzeitfehler bekommen und somit der Editor geöffnet wird.
Mein Makro besteht aus verschiedenen Modulen die aus einem Hauptmodul mit Call aufgerufen werden. Kann ich nun einfach in jedes Modul ganz oben (unter dem sub) ein "On Error Resume Next" Befehl einfügen? Geht das? Macht man das?
Desweiteren hätte ich gerne, dass wenn das Makro zu Ende ist und es ein Error gab, der aber übersprungen wurde, es eine MsgBox gibt. Dort soll dann stehen: "Es gab einen Fehler und deshalb könnte etwas fehlen" oder so. Gibt es den Befehl "If there was a Error then" oder so :)
Wäre froh um Hilfe und liebe Grüsse
Ximena
Anzeige

3
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: On Error Resume Next
25.06.2012 15:16:18
ChrisL
Hi Ximena
Kann man, geht das? ja
Macht man? nein
Die wichtigsten Fehler Situation solltest du anderweitig abfangen (z.B. prüfen ob ein Blatt vorhanden ist, bevor man was reinschreibt). Wenn dann trotz allem ein Fehler auftritt, sollte man den Fehler/Ursache beheben. Wenn du im Nachhinein erfährst, dass jemand einen Fehler hatte, ist es oft zu spät um die genaue Situation zu reproduzieren.
Dennoch kann Resume Next sinnvoll sein, wenn es Quick & Dirty gehen soll resp. wenn du die Situation genau erkannt hast und ein Überspringen egal ist (in dem Fall brauchst du aber auch im Nachhinein keine Meldung mehr ausgeben).
Desweiteren... z.B. am Ende vom Code
If Error "" Then MsgBox "Es war ein Fehler aufgetreten"
Die richtige Fehlerbehandlung ist eine Wissenschaft für sich (mal googlen). Mein Tipp: Schau dass es zu keinen Fehlern kommt, dann musst du diese auch nicht behandeln ;)
cu
Chris
Anzeige
AW: On Error Resume Next
25.06.2012 15:54:48
Ximena
Hallo Chris
Danke für deine Antwort.
Natürlich ist mir klar, dass ich die Fehler lieber selbst behebe. Aber da ich nicht immer die Makro laufen lasse, und immer neue Fehler auftreten, will ich einfach nicht, dass die anderen User dann den Code sehen müssen.
Es kann zum Beispiel sein, dass ich die Makro zweimal hintereinander laufen lasse - genau gleich - und einmal geht alles gut und einmal gibt es einen Fehler und ich weiss einfach nicht, warum! Ich versuche die meisten zu beheben und trotzdem bleiben manchmal ein paar... -.-
Danke für die MsgBox!
Liebe Grüsse
Ximena
Anzeige
AW: On Error Resume Next
25.06.2012 16:49:47
fcs
Hallo Ximena,
man kann das Ganze auch noch ein wenig ausschmücken.
Wenn du deine Subs die per Call aufgerufen werden in Funktions umbenennst, dann kannst bei Fehler in einer Sub-Task auch direkt die Hauptprozedur kontrolliert beenden, falls es Sinn macht.
Wenn Prozeduren lang und komplex sind, sollte man einen Kontrollvariable mitlaufen lassen, damit der Fehler ggf. besser eingegrenzt werden kann.
Schaut dann etwa wie folgt aus.
Das mindeste an Fehler-Prüfung wäre Case 0 (Alles OK) und Case Else mit Meldetext.
Gruß
Franz
Sub Hauptprozedur()
If fncTest1 = False Then GoTo Beenden
'If fncTest2 = False Then GoTo Beenden
Beenden:
'Hier wird aufgeräumt
With Application
.ScreenUpdating = True
.EnableEvents = True
'etc. pp
End With
End Sub
Function fncTest1() As Boolean
Dim intFehler As Integer, strMsgTitel As String, strMsgTxt As String
Dim wks As Worksheet
On Error GoTo Fehler
fncTest1 = True
'Abschnitt 1
intFehler = 1
'Code ...
Set wks = ActiveWorkbook.Worksheets(2)
With wks
End With
'Abschnitt 2
intFehler = 2
'Code ...
'usw.
Fehler:
With Err
strMsgTitel = "Fehler - Makro: fncTest1"
strMsgTxt = "Fehler-Nr.: " & .Number & vbLf & .Description & vbLf _
& "intFehler: " & intFehler
Select Case .Number
Case 0 'alles ist OK
Case 9 'index außerhalb gültiger Bereich
Select Case intFehler
Case 1
fncTest1 = False
strMsgTxt = strMsgTxt & vbLf & "2. Tabellenblatt ist in aktiver Datei """ _
& ActiveWorkbook.Name & """ noch nicht vorhanden!"
MsgBox strMsgTxt, vbInformation + vbOKOnly, strMsgTitel
Case Else
Resume Next
End Select
Case Else
fncTest1 = False
MsgBox strMsgTxt, vbInformation + vbOKOnly, strMsgTitel
End Select
End With
End Function

Anzeige
;

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Fehlerbehandlung in VBA mit "On Error Resume Next"


Schritt-für-Schritt-Anleitung

  1. Einfügen von "On Error Resume Next": Füge direkt unter jeder Sub-Prozedur den Befehl On Error Resume Next ein. Das sorgt dafür, dass das Makro bei einem Laufzeitfehler nicht stoppt, sondern mit der nächsten Zeile fortfährt.

    Sub MeinMakro()
       On Error Resume Next
       ' Dein Code hier
    End Sub
  2. Fehlerprüfung nach der Ausführung: Am Ende des Codes kannst du eine MsgBox einfügen, die anzeigt, ob ein Fehler aufgetreten ist. Verwende dafür den Befehl If Err.Number <> 0 Then.

    If Err.Number <> 0 Then
       MsgBox "Es gab einen Fehler und deshalb könnte etwas fehlen."
    End If
  3. Fehlerbehandlung implementieren: Nutze On Error Goto für spezifischere Fehlerbehandlungen. Das ermöglicht dir, gezielt auf Fehler zu reagieren, anstatt einfach weiterzumachen.

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

Häufige Fehler und Lösungen

  • Fehler beim Aufruf von Modulen: Stelle sicher, dass alle Module korrekt benannt und referenziert sind. Ein häufiger Fehler ist, dass ein Modul nicht existiert oder falsch aufgerufen wird.

  • MsgBox zeigt keine Fehlermeldung: Überprüfe, ob der Fehler wirklich aufgetreten ist. Wenn du On Error Resume Next verwendest, wird der Fehler ignoriert.

  • Nutzung von Resume Next: Diese Methode kann zu unerwartetem Verhalten führen, wenn du nicht genau weißt, wo der Fehler auftritt. Das sollte nur verwendet werden, wenn du sicher bist, dass es keine kritischen Auswirkungen hat.


Alternative Methoden

  • "On Error GoTo" für spezifische Fehler: Anstatt alle Fehler zu ignorieren, kannst du spezifische Fehler abfangen und entsprechend reagieren. Dies gibt dir mehr Kontrolle über den Ablauf deines Codes.

  • Fehlerprotokollierung: Anstatt nur eine MsgBox anzuzeigen, kannst du die Fehler in eine Log-Datei schreiben. So kannst du später nachvollziehen, was schiefgelaufen ist.

    Open "Fehlerlog.txt" For Append As #1
    Print #1, "Fehler: " & Err.Description
    Close #1

Praktische Beispiele

Hier ein einfaches Beispiel, wie du On Error Resume Next in einem Makro verwenden kannst:

Sub BeispielMakro()
    On Error Resume Next
    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("NichtVorhanden")

    If ws Is Nothing Then
        MsgBox "Das Blatt existiert nicht."
    End If
End Sub

In diesem Beispiel wird beim Zugriff auf ein nicht vorhandenes Arbeitsblatt kein Laufzeitfehler angezeigt, sondern eine MsgBox informiert den Benutzer.


Tipps für Profis

  • Zielgerichtete Fehlerbehandlung: Nutze On Error Resume Next nur dort, wo es unbedingt nötig ist. Setze es nicht als globale Lösung ein, sondern spezifisch für kritische Abschnitte.

  • Regelmäßige Überprüfung des Codes: Gehe regelmäßig deine Makros durch und teste sie auf Fehler. Manchmal können durch Updates oder Änderungen an den Daten neue Fehler auftauchen.

  • Verwende Debugging-Tools: Nutze die integrierten Debugging-Tools in VBA, um Probleme schneller zu identifizieren.


FAQ: Häufige Fragen

1. Was macht "On Error Resume Next"?
Es ignoriert Laufzeitfehler und fährt mit der nächsten Zeile des Codes fort.

2. Ist es sicher, "On Error Resume Next" zu verwenden?
Es kann nützlich sein, sollte aber mit Vorsicht verwendet werden, da es dir wichtige Fehlerinformationen vorenthalten kann.

3. Wie kann ich herausfinden, ob ein Fehler aufgetreten ist?
Nutze If Err.Number <> 0 Then um zu überprüfen, ob ein Fehler vorhanden ist, und handle entsprechend.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige