Funktion wird nicht bis Ende abgearbeitet

the_lorn

Mitglied
Hallo Ihr,

ich hab ein seltsames Probelem (VBA6)

ich rufe in einer Funktion ein sub auf indem wieder ein beliebiges sub aufgerufen wird. Jede der einzelnen "Funktionen" arbeiten einen längeren Code ab.
Nun hab ich bei jeder dieser "Funktionen" (function, sub) eine Fehlerbehandlung eingbaut:

Code:
On Error GoTo Error_click
... irgend ein Code

Exit_click:
    Exit Sub

Error_click:
    writeLog Err.Description & vbCrLf & Err.Source & "Nummer: " & Err.Number
    GoTo Exit_click
So und bei der ersten Funktion hab ich bei Exit_click MsgBox "Ende Function" eingefügt.
Nun wird diese Meldung aber nie Ausgegeben. Und die aufgerufenen Subs schreiben auch keinen Fehler in die Log-Datei! Und dieses funktion zu schreiben der Log funktioniert an anderer Stelle perfekt. Die Subs scheine ihre Arbeit auch zu verricht den die Tabellen Einträge werden betätigt.

Woran soll das jetzt liegen

PS: Hab manchmal das Problem, dass eine Funktion mit einer Meldung abgebrochen wird, dass der Zugriff verweigert wurde, weil auf die Tabelle schon zugegriffen wird. Starte ich die Datenbank neu läuft es wieder ne Weile. Daher hatte ich den verdacht, dass irgendeine Funktion nicht richtig beendet wird. Möglicherweise ist dieses oben geschilderte Problem die Lösung des Anderen.:confused:

Ideen?
 
Hi,

Der Code sieht so aus:

Code:
Public Function create()
On Error GoTo Err_create
    DoCmd.Hourglass True
    Call Form_formCreateArchiv.createArchive_Click
    
Exit_create:
    MsgBox "Ende Function"
    DoCmd.Hourglass False
    Exit Sub
    
Err_create:
    writeLog "call create: " & Err.Description & " Number: " & Err.Number
    GoTo Exit_create
End Sub

in createArchive_Click() werden jetzt noch weitere subs aufgerufen die auch alle scheinbar vollständig beendet werden. Es kommt zumindest keine Fehlermeldung zustande.:confused:
 
Hast du in den Unterfunktionen auch irgendwelche Errorbehandlungen drin, die diese vielleicht aufheben? (z.B. On Error Resume Next )

PS: Hab manchmal das Problem, dass eine Funktion mit einer Meldung abgebrochen wird, dass der Zugriff verweigert wurde, weil auf die Tabelle schon zugegriffen wird. Starte ich die Datenbank neu läuft es wieder ne Weile.

Deutet darauf hin das du vielleicht ein Recordset nicht richtig zumachst (res.close) oder den Verweis auf eine Datenbank nicht entfernst nachdem du durchgelaufen bist.

Grüsse bb
 
Du hast eine Funktion, beendest sie aber mit End Sub bzw. steigst mit Exit Sub aus. Sollte eigentlich eine Fehlermeldung ergeben. Oder hast du dich hier nur verschrieben?

Setz mal an ein paar Codestellen Breakpoints, damit wird dort die Ausführung pausiert und lässt sich z.B. mit Einzelschritten weiterverfolgen. Du rufst im Code ja auch eine weitere Prozedur aus, vielleicht liegt dort ein Fehler. Schau dir das alles mal in Einzelschritten durch, so findest du den Fehler leichter.


Der Doc!
 
Hi,

jupp, exit sub ist falsch, hab mich verschrieben.:-( In meinem Code steht Function.

In den andern Unterfunktionen hab ich auch Fehlerbehandlungen eingebaut! Heißt das, wenn diese ausgeführt wird, werden die Codes der Funktionen oberhalb der abgebrochenden Funktion nicht mehr abgearbeitet?(ihr wisst was ich meine?)
Ich hatte mir das nämlich so vorgestellt, dass wenn die Unterfunktion mit exit beendet wird es automatisch in der Oberfunktion weiter geht. Ist dem nicht so?
Bsp:

Code:
Public Function create()
On Error GoTo Err_create
    DoCmd.Hourglass True
    Call Form_formCreateArchiv.createArchive_Click  -->wenn hier drin Fehlerbehandlung dann weiter zu Exit_create: oder nicht
    
Exit_create:
    MsgBox "Ende Function"
    DoCmd.Hourglass False
    Exit Function
    
Err_create:
    writeLog "call create: " & Err.Description & " Number: " & Err.Number
    GoTo Exit_create
End Function

Zitat:PS: Hab manchmal das Problem, dass eine Funktion mit einer Meldung abgebrochen wird, dass der Zugriff verweigert wurde, weil auf die Tabelle schon zugegriffen wird. Starte ich die Datenbank neu läuft es wieder ne Weile.
Deutet darauf hin das du vielleicht ein Recordset nicht richtig zumachst (res.close) oder den Verweis auf eine Datenbank nicht entfernst nachdem du durchgelaufen bist.
hab ein fehlendes db.close und rs.close gefunden. Werd mal beobachten ob das erste Phänomen jetzt verschwunden ist.
 
Zuletzt bearbeitet:
In Prinzip wird beim beenden/abbrechen einer Prozedur/Funktion an der Stelle weitergesetzt, wo die Prozedur/Funktion aufgerufen wurde. Dabei ist es auch egal, ob in der Funktion ein Fehler entstanden ist, solange du ihn per Fehlerbehandlung abfängst.


Der Doc!
 
Zurück