Fehlerbehandlung

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.

Uni

hi Uni,

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:

Sub Main()
On Error GoTo Proc_Err
Call Test
Proc_Exit:
Exit Sub

Proc_Err:
MsgBox Err.Description, vbCritical
End Sub

Sub Test()
Err.Raise 1 + vbObjectError, „Test“, „Test“
End Sub

Funktioniert wie erwartet und der Code wird nicht unterbróchen.

Abgesehen davon wird doch standardmäßig in dem Projekt beim
Start sofort Form_load ausgeführt, zu Main kommt man doch gar
nicht, oder?

Naja, ich hab halt in den Projekteigenschaften „Sub Main“ als Startobjekt eingestellt.

Uni

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.