On Error Resume Next | Herbers Excel-Forum

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
MsgBox


Betrifft: On Error Resume Next
von: Ximena
Geschrieben am: 25.06.2012 15:01:03

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

Betrifft: AW: On Error Resume Next
von: ChrisL
Geschrieben am: 25.06.2012 15:16:18
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

Betrifft: AW: On Error Resume Next
von: Ximena
Geschrieben am: 25.06.2012 15:54:48
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

Betrifft: AW: On Error Resume Next
von: fcs
Geschrieben am: 25.06.2012 16:49:47
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


Beiträge aus den Excel-Beispielen zum Thema "Textbox als Zeit in Zelle ausgeben."