Freigabe durch Close File wird von anderem Prozess nicht erkannt

10/07/2008 - 12:16 von Raimund Gryszik | Report spam
Hallo Experten,

in Ergànzung zu meinem letzten Thread hier noch eine andere Frage in diesem
Zusammenhang:

on error resume next
do
open Steuerdatei for Output Access Write Lock Read Write as #ff
if err.number = 0 then exit do
close #ff
doevents
wait einige Sekunden
loop nicht zu oft

Diese Schleife soll solange warten, bis ein anderer Prozess (der die selbe
Schleife beinhaltet), die Steuerdatei nach der Bearbeitung wieder geschlossen
hat. Leider tritt hier folgendes Problem auf:

Wenn die Schleife beim ersten Mal den Open nicht vollziehen kann, dann kommt
sie nie mehr zum Erfolg, d.h. die Datei bleibt solange gesperrt, bis die
ganze VBA-Prozedur neu gestartet wird.

Mit anderen Worten:

-Irgendein Prog1 sperrt die Steuerdatei
-Prog2 (in diesem Fall Excel-VBA) startet die obige Schleife, kann
Steuerdatei nicht öffen.
-Prog1 schließt die Steuerdatei.
-Jetzt kann Prog2 trotzdem in dieser Schleife nicht auf die Steuerdatei
zugreifen. Sondern erst nach VBA-Ende und Prozedurneustart.

Das Problem liegt also nicht im Open oder Close von Prog1, sondern in dieser
Schleife des Prog2.

Tausend Tests, kein Ergebnis (schluchz)
Wo liegt der Grund?

Danke für Tipps
Raimund Gryszik, Berlin
 

Lesen sie die antworten

#1 Thorsten Albers
10/07/2008 - 13:18 | Warnen spam
Raimund Gryszik schrieb im
Beitrag ...
on error resume next
do
open Steuerdatei for Output Access Write Lock Read Write as #ff
if err.number = 0 then exit do
close #ff
doevents
wait einige Sekunden
loop nicht zu oft



Du solltest Deine 'Fehlerbehandlung' etwas differenzierter aufbauen, da
hier ja nicht nur ein bestimmter Fehler auftreten kann, die Schleife aber
nur bei Fehler 55 (Datei bereits geöffnet) auszuführen ist.
In Ergànzung: Das soll hoffentlich nur ein schematisches Beispiel sein! Die
Dateinummer codiert man in VB/VBA nicht hart sondern bezieht sie über
FreeFile(). Weiterhin solltest Du immer die Probleme von DoEvents im Auge
haben: Zumindest sollte der Code so aufgebaut sein, daß der hier von Dir
gezeigte Code wàhrend der Ausführung der Schleife nicht noch einmal
aufgerufen werden kann.

-
Thorsten Albers albers(a)uni-freiburg.de
-

Ähnliche fragen