Anzeige

Errorhandler - Rücksprung zu Fehlerzeile


#1
Hallo,

ich bin noch ziemlich frisch in VBA und nachdem mir gerade schon so gut von Yaslaw geholfen wurde:

Ich habe folgendes programmiert:
- Wenn ein Projekt abgeschlossen wurde, soll eine Blankostruktur mit Unterordnern und Dateien aus einer Vorlagenstruktur kopiert und in ein Unterverzeichnis mit dem Namen des Projekts eingefügt werden. Soweit so gut.
- Jedoch, wenn die Vorlagenstruktur nicht unter dem Pfad gefunden wird, den ich aus einer Zelle auslese, soll mit dem errorhandler das Verzeichnis durch den User selbst gewählt werden.
Meine Frage ist, wie springe ich nun, nachdem der Pfad ermittelt wurde wieder zurück zu der Zeile in der der Fehler passierte? Oder muss ich nun den Code nun dort anhängen und nochmal laufen lassen? Das wäre doch doppelt gecodet.
Ich habe etwas von "GoSub" gelesen, verstehe diesen Befehl aber irgendwie nicht, bzw. kann ihn nicht umsetzen.
Hat da jemand ein Beispiel parat, damit ich mir vorstellen kann, wie man damit arbeitet oder hat eine andere Idee?

EDIT: Ich hab es anders gelöst, als ich ursprünglich vorhatte;
Ich habe den Code in mehrere Subs und functions aufgeteilt, statt alles untereinander zu kritzeln und bin per "call" zurückgesprungen.
 
Zuletzt bearbeitet:

Yaslaw

n/a
Moderator
#2
Per call ist besser.

Aber zu Goto. Das kann manchmal Sinn machen. Dazu musst du einen Anker setzen, zu dem du dann springen kannst.
Das sollte man aber nur machen wenns unbedingt nötig ist oder in der Fehlerrutine.

Visual Basic:
Public sub test()
    Dim myObj As Object
    Set myObj = New MyClass
    If myObj.id = 0 Then
        'Prozedur verlassen, aber mit einem sauberen Ausstieg
        goto Exit_Handler
    End If

    'Mach hier  noch irgendwas

'Der Anker Exit_Handler. Hier wird alles sauber abgebaut bevor die Sub verlassen wird
Exit_Handler:
    'Fehler ignorieren und versuchen das Objekt sauber zu schliessen und zu entfernen
    On Error resume next
    myObj.close
    Set myObj = Nothing
    Exit Sub  'Sub verlassen, damit es nicht automatisch in den Err_Handler hineingeht
'Anker für die Fehlerbehandlung
Err_Handler:
    'Mach was mit dem Fehler
    MsgBox Err.Number & " " & Err.Description
    'Setz den Fehler zurück und fahre weiter bei Exit_Handler
    Resume Exit_Handler
End Sub
 
Anzeige
Anzeige