Ich kämpfe seit längerem mit einem Verständnisproblem, über das ich immer wieder stolpere und das mich grausam nervt. Ein ganz einfaches Beispiel für ein EXE-Projekt:
Sub Main()
On Error GoTo Proc_Err
Form1.Show
Proc_Exit:
Exit Sub
Proc_Err:
MsgBox Err.Description, vbCritical
End Sub
Wenn ich jetzt beim Laden von Form einen Fehler provoziere …
Private Sub Form_Load()
Err.Raise 1 + vbObjectError, „Test“, „Test“
End Sub
… dann hält das Programm in der Entwicklungsumgebung einfach an, obwohl unter Extras „Unterbrechen bei Fehlern“ auf „bei nicht verarbeiteten Fehlern“ eingestellt ist. Wenn ich das Ganze kompiliere, kommt beim Starten eine Standard-Meldung - aber nicht meine. Der Fehler müsste aber doch eigentlich an die aufrufende Prozedur, nämlich Sub Main „hochgereicht“ werden. Oder wie oder was??? Erscheint mir einfach unlogisch, was da passiert.
soviel ich weiß, gilt „on error“ nur innerhalb einer Sub.
Schreib also einfach:
Private Sub Form_Load()
On Error GoTo Proc_Err
Err.Raise 1 + vbObjectError, „Test“, „Test“
exit sub
Proc_Err:
MsgBox Err.Description, vbCritical
End Sub
dann sollte’s gehn.
Abgesehen davon wird doch standardmäßig in dem Projekt beim Start sofort Form_load ausgeführt, zu Main kommt man doch gar nicht, oder?
[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]
soviel ich weiß, gilt „on error“ nur innerhalb einer Sub.
Nee, der Fehler wird normalerweise immer weitergereicht.
Beispiel:
Klar stimmt natürlich. Vermeid ich nur immer, da’s sonst unübersichtlich wird.
Hab mal ein bißchen in der Hilfe geschmökert, aber nix erklärendes gefunden. Kann mir (laienhaft) denken, daß mit Aufruf des Forms das Ding ja als neue Instanz erzeugt und damit die Fehlerbehandlung neu initialisiert wird.
wie auch immer, mit ON ERROR in den betr. Sub selbst gibt’s dieses Problem nicht.