Dies wird ausführlich im VB6-Handbuch unter Error Handling Hierarchy erläutert. On Error Goto 0
deaktiviert den Fehlerhandler in der aktuellen Prozedur, nicht in den Prozeduren, die ihn aufgerufen haben.
Wenn ein Fehler in einer Prozedur auftritt und dieses Verfahren nicht über eine aktivierten Fehlerbehandlung, durchsucht Visual Basic rückwärts durch die anhängigen Verfahren in der Liste Anrufe - und führt die erste aktiviert Fehlerbehandlung es findet. Wenn kein Fehler Handler überall in der Anrufliste auftritt, zeigt einen Standard unerwarteten Fehler Nachricht und beendet die Ausführung.
Wie schon andere gesagt haben, können Sie auf gehen Extras-Einstellungen-Allgemein Registerkarte und wählen bei allen Fehlern. Dadurch werden alle Ihre On Error-Anweisungen wirksam deaktiviert - die IDE bricht sofort bei jedem Fehler ab.
Das kann irritierend sein, wenn Ihr VB6-Code Fehler als Teil des normalen Betriebs auslöst. Zum Beispiel, wenn Sie prüfen, ob eine Datei existiert oder wenn der Benutzer in einem allgemeinen Dialog auf Abbrechen klickt. Sie möchten nicht, dass die IDE jedes Mal in diesen Zeilen bricht. Sie können jedoch in allen Prozeduren für die Ereignisbehandlung Fehlercodes enthalten, um das Programm wegen unerwarteter Fehler abzustürzen. Aber sie sind ein Ärgernis, wenn Sie Probleme debuggen, da die IDE mit dem Fehler nicht in der Zeile bricht. Ein Trick besteht darin, diese Fehlerbehandlungsroutinen beim Ausführen in der IDE auszuschalten, sie jedoch in der ausführbaren Datei zu speichern. Du machst es so.
Diese Funktionen in ein Modul einfügen.
Public Function InIDE() As Boolean
Debug.Assert Not TestIDE(InIDE)
End Function
Private Function TestIDE(Test As Boolean) As Boolean
Test = True
End Function
Dann können Sie Ihre Fehlerhandler wie folgt schreiben.
Private Sub Form_Load()
If Not InIDE() Then On Error Goto PreventCrashes
<lots of code>
Exit Sub
PreventCrashes:
<report the error>
End Sub
eingeklemmt von here. Noch ein Tipp: Verwenden Sie das kostenlose Add-In MZTools, um diese Fehlerhandler automatisch hinzuzufügen.Für Code in Produktionsqualität könnten Sie weiter gehen und einen Fehlerhandler in jede Routine einfügen, um eine ghetto stack trace zu erstellen. Sie können die Fehler auch sofort in jedem Fehlerhandler protokollieren.
EDIT: Ant hat richtig darauf hingewiesen, dass On Error Goto -1
ist ein VB.Net statement und ist nicht gültig in VB6.
BEARBEITEN: Arvo und OneNerd haben Antworten mit einigen interessanten Diskussion über das Emulieren von Teardown Blocks in VB6 Fehlerbehandlung geschrieben. Die Diskussion in this question ist ebenfalls einen Blick wert.
Nicht korrekt LarryF. On Error Goto 0 deaktiviert den Fehlerhandler in der Routine selbst, aber dann schaut die Laufzeit den Aufruf-Stack für jeden aktiven Fehlerbehandler zurück. Wenn es einen gibt, wird es den Fehler behandeln. – MarkJ
Opps .. Mein schlechtes. Ich muss über vbScript nachgedacht haben, das sich wie beschrieben verhalten würde. Oder es zumindest gewohnt ist. (Ich weiß nicht, was die neueste Version ist, und wenn es kürzlich geändert wurde ..) – LarryF