Hallo zusammen,
ich habe eine Datenbank, in deren Verlauf ein Formular mit eien Web Fenster geöffnet wird. Wird nun das Fenster geschossen geht die Anwendung zurück ins das vorherige VBA und arbeitet das weiter ab.
Das Problem ist, das ich eine Fehlermeldung bekomme bevor der nächste Schritt vollzogen wird. Wenn ich das ganze in Einzelschritten ausführe funktioniert das. Es funktioniert auch, wenn ich eine MsgBox einbaue. Dann scheint genug Zeit für das Schließen vorhanden zu sein. Ich habe schon versucht eine Zeitschleife einzubauen funktioniert aber nicht.
Vieleicht noch wichtig, das Webfenster öffnet eine Datei in einem Temp-Verzeichnis. Nach dem Schließen soll über Kill zunächst die Datei und dann das Verzeichnis gelöscht werden. Genau hier kommt es zu dem Problem.
Habt ihr eine Idee?
Vorab danke
Florian BGL
HAllo,
ohne den Code zu sehen, ist nur zu mutmaßen.
Du kannst mal versuchen, an ein paar Stellen im Code
DoEvents
einzubauen.
Hallo,
hier ist der Code aus dem WebFormular:
Option Compare Database
Private Declare Function RemoveDirectory Lib _
"kernel32" Alias "RemoveDirectoryA" _
(ByVal lpPathName As String) As Long
Private Sub Btn_Beenden_Click()
Dim Conn6 As New ADODB.Connection
Dim DBS6 As ADODB.Recordset
Set Conn6 = CurrentProject.Connection
Set DBS6 = New ADODB.Recordset
DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
DBS6.MoveFirst
DBS6.Delete
DBS6.Close
DoCmd.Close
DoCmd.OpenForm "Frm_Postbuch_Suche"
End Sub
Private Sub Form_Close()
Dim Conn6 As New ADODB.Connection
Dim DBS6 As ADODB.Recordset
Dim Str_Datenanzahl As String
Set Conn6 = CurrentProject.Connection
Set DBS6 = New ADODB.Recordset
DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
Str_Datenanzahl = DBS6.RecordCount
'Wenn ein Datensatz erfasst wurde dann geht es weiter; ansonsten Aufruf der Erfassung für die Ablagepfad der Anlagen
If Str_Datenanzahl = "0" Then GoTo Weiter Else
DBS6.MoveFirst
DBS6.Delete
Weiter:
DBS6.Close
End Sub
Private Sub Form_Open(Cancel As Integer)
Dim Conn6 As New ADODB.Connection
Dim DBS6 As ADODB.Recordset
Set Conn6 = CurrentProject.Connection
Set DBS6 = New ADODB.Recordset
DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
DBS6.MoveFirst
Str_Zwischenablage = DBS6!Zwischenablage
DBS6.Close
Me.MeinWebBrowser.Navigate Str_Zwischenablage
End Sub
Und hier dann der Code vom Unterformular:
Private Sub Anlage_Click()
Dim Str_Anlage As String
Const Verz = "Temp"
Set Conn4 = CurrentProject.Connection
Set DBS4 = New ADODB.Recordset
Set Conn6 = CurrentProject.Connection
Set DBS6 = New ADODB.Recordset
DBS4.Open "Tab_Anlagenpfad", Conn4, adOpenKeyset, adLockOptimistic
DBS4.MoveFirst
Str_Anlagenpfad = DBS4!Ablage_Anlagen
DBS4.Close
Str_Anlage = Me!Anlage
MkDir "V:\Abt3\3.6\Temp"
RestoreBinFile Me!Anlage, "V:\Abt3\3.6\Temp\", True
DBS6.Open "Tab_Zwischenablage", Conn6, adOpenKeyset, adLockOptimistic
DBS6.AddNew
DBS6!Zwischenablage = "V:\Abt3\3.6\Temp\" & Me!Anlage
DBS6.Update
DoCmd.OpenForm "MeinWebBrowser", , , , , acDialog
Kill ("V:\Abt3\3.6\Temp\*.*")
RmDir ("V:\Abt3\3.6\Temp")
End Sub
Ich hoffe das hilft weiter.
Gruß
Florian-BGL
Hallo zusammen,
hat keiner eine Idee?
Ich habe zwischenzeitlöich verschi9ede Dinge ausprobiert. Wenn ich die Befehle Kill... und RmDir auseinander ziehe also z.B. in unterschiedlichen Formularen ablege funktioniert es. Es liegt offensichtlich an der Art der Datei. Bei Jepg funktioniert es und bei doc oder xls Dateien wiederum nicht. Wahrscheinlich brauchen diese Dateien länger bis sie geschlossen und gelöscht wurden. Es ist ein eindeutiges Laufzeitproblem. Der Befehl RmDir will das Verzeichnis löschen obwohl noch Dateien enthalten sind.
Vieleicht gibt es einen Befehl der sowohl das Verzeichnis als auch die Dateien löscht. Analog der Verfahrensweise in Explorer.
Was macht denn der Befehl DoEvents? Ich konnte damit nichts anfangen.
Beste grüße
ein ratloser Florian
Hallo,
Tipps:
http://msdn.microsoft.com/de-de/library/bb979106.aspx
Hallo zusammen,
ich habe mich für folgende Variante entschieden:
Public Function DelTreeVB(ByVal Path As String) As Boolean
Dim sName As String
If Right$(Path, 1) <> "\" Then
Path = Path & "\"
End If
DelTreeVB = True
On Error GoTo Error_DelTree1
sName = Dir$(Path & "*.*", vbHidden + vbDirectory)
While Len(sName)
If (sName <> ".") And (sName <> "..") Then
If (GetAttr(Path & sName) Or vbDirectory) = vbDirectory Then
DelTreeVB = DelTreeVB(Path & sName & "\")
sName = Dir$(Path & "*.*", vbHidden + vbDirectory)
Else
SetAttr Path & sName, vbNormal ' Attribute zurücksetzen
Kill Path & sName
sName = Dir$() ' nächste Datei suchen
End If
Else
sName = Dir$()
End If
Wend
RmDir Path
Exit_DelTreeVB:
Exit Function
Error_DelTreeVB:
DelTreeVB = False
Resume Next
End Function
Nun meine Frage:
Wo lege ich fest welches Verzeichnis gelöscht wird?
Mache ich das mit Path = "C:\Temp\"
lDanke vorab Florian
Hallo,
den Pfad legst Du beim Aufruf der Funktion als Parameter für deren Argument fest....
Hallo,
kannst du mir dafür ein Beispiel nennen?
Das Verzeichnis könnte Beispielhaft "C:\Temp" sein.
danke
Gruß
Florian
Hallo,
wirklich?
If DelTreeVB("C:/temp") then
Msgbox "alles paletti"
Else
Msgbox "irgendwas stimmt nicht"
End if
Hallo,
vielen Dank funktioniert alles .
Das mit den Parametern hatte ich bislang noch nicht.
Danke
Florian