Hallo,
ich habe ein Projekt mit einigen Modulen und Formularen und auch Code in div. Tabellenblättern. Bei Fehlern soll nicht unterbrochen werden. Wie kann ich das am einfachsten bewerkstelligen?
LG
Jochen
PS: Natürlich fange ich Fehler, die nicht ignoriert werden können/sollen in den entsprechenden Prozeduren ab.
füg em Makro folgendem Code bei:
on error resume next
es soll aber im prinzip vermieden werden bei Fehlern das Makro weiterlaufen zu lassen.am besten wäre den Fehler abzufangen und dem Anwender einen Hinweis geben das ein Fehler aufgetreten ist.
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
Hallo, Jochen!
ich habe ein Projekt mit einigen Modulen und Formularen und
auch Code in div. Tabellenblättern. Bei Fehlern soll nicht
unterbrochen werden. Wie kann ich das am einfachsten
bewerkstelligen?
PS: Natürlich fange ich Fehler, die nicht ignoriert werden
können/sollen in den entsprechenden Prozeduren ab.
füg em Makro folgendem Code bei:
on error resume next
es soll aber im prinzip vermieden werden bei Fehlern das Makro
weiterlaufen zu lassen.am besten wäre den Fehler abzufangen
und dem Anwender einen Hinweis geben das ein Fehler
aufgetreten ist.
Oh ja. On Error Resume Next ist nicht wirklich prickelnd.
Ich baue mir in wirklich jede Funktion folgenden Rumpf ein:
Sub IrgendEineFunktion
On Error GoTo ErrorHandler
' Hier steht der Funktionscode...
ErrorHandler:
Select Case Err.Number
Case 0
Case Else
Msgbox ... mit Code, Modul- und Funktionsnamen
Resume ErrorHandler
End Select
' Ende des Fehlerbehandlungsblocks.
End Sub
Hinter das Case 0 kommen dann die Aktionen, die zum einen keinen Fehler mehr produzieren können, und die zum anderen ggf. die Prozedur aufräumen (Speicher freigeben etc.). Mit Case x (z. B. „53-Datei nicht gefunden“) kannst Du die vorhergesehenen Fehler abfangen (dann z. B. mit Resume Next bei einem Kill-Befehl). Alles, was dann noch in der Messagebox-Zeile landet, solltest Du nach und nach abfangen bzw. verbessern.
Gruß, Manfred
Danke, aber:
Hallo,
danke für die schnellen Antworten!
wie man eine lokale Fehlerbehandlung macht (wunderschön in der Antwort unten gezeigt!) ist mir klar. Ich habe die Frage offensichtlich nicht klar formuliert, Entschuldigung!
Meine Frage ist:
Gibt es eine Möglichkeit, solch eine Fehlerbehandlung _global_, also für das gesamte Projekt zu machen (und nicht für jede einzelne Prozedur)? Wenn nein, geht sowas für eine _komplette_ Arbeitsmappe, ein _komplettes_ Modul und ein _komplettes_ UserForm ?
LG
Jochen
Hallo, Jochen!
Gibt es eine Möglichkeit, solch eine Fehlerbehandlung
_global_, also für das gesamte Projekt zu machen (und nicht
für jede einzelne Prozedur)? Wenn nein, geht sowas für eine
_komplette_ Arbeitsmappe, ein _komplettes_ Modul und ein
_komplettes_ UserForm ?
Würde sagen: Jein. Wenn in der allerersten Routine eine Fehlerbehandlung drin ist und in den folgenden nicht, werden Fehler in aufgerufenen Routinen an die erste Routine durchgereicht. Das könnte dann so was sein, was Dir vorschwebt.
Nur wird die Fehlersuche dann ziemlich blöde. Mit der Variante Abfangen in jeder Routine bekommst Du wenigstens genau die Fehlermeldung an der Stelle, an der der Fehler auftritt.
Hast Du Angst vor dem Aufwand? Speicher Dir den Prozedurrumpf in einer Textdatei ab, dann kannst Du ihn Dir immer wieder in die neuen Routinen reinkopieren. Geht schnell, einfach, und Du findest die Fehler ebenso einfach und schnell.
Gruß, Manfred
Ergänzend bleibt zu sagen: Wenn die Routine mal durchgelaufen ist (z. B. UserForm_Initialize), dann ist die Fehlerbehandlung erst mal wieder weg. Heißt: Sie muss dann z. B. beim Buttonclick neu aktiviert werden.
Da VBA und Excel diesbezüglich ereignisorientiert sind und somit eigentlich kein von Dir geschriebenes „Programm“ permanent durchläuft, musst Du eh ziemlich sicher in 50 % aufwärts der Routinen eine Fehlerabfangroutine einbauen.
Also statt „Jein“ eher „Nö“.
Gruß, Manfred