RmDir Probleme

Hallo,

Ich hab mir ein code zusammen gestellt der bis auf die letzte zeile auch funktioniert.
Wenn der Ordner Existiert Kopiert er korrekt alles in den neuen ordner, löscht alle dateien die in dem ordner drin sind.
Aber dann sobald er RmDir machen soll kommt die fehler meldung:

Laufzeitfehler ‚75‘:
Fehler beim Zugriff auf Pfad/Datei

Und dann makiert er die Zeile mit RmDir in gelb.

Dim fso, fld As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If Dir(pfad & "\Personal\" & namem & " " & vorname & "\") "" Then
 Set fld = fso.GetFolder(pfad & "\Personal\" & namem & " " & vorname & "\")
 fld.Copy (pfad & "\Probetage\")
 ChDir (pfad & "\Probetage\")
 Kill (pfad & "\Personal\" & namem & " " & vorname & "\*.\*")
 RmDir (pfad & "\Personal\" & namem & " " & vorname & "\")
End If

Mein problem ist das wenn ich es mit

 fso.Delete (pfad & "\Personal\" & namem & " " & vorname & "\") 

mache löschte er den kompletten inhalt und sobald er dann den ordner löschen will bekommt er die fehlermeldung „Zugriff Verweigert“.

Allerdings ist das kein schreibschutz und auch keine Datei mehr drin die er bearbeiten könnte denn die dateien hatte er bereits gelöscht.

Ich bin am verzweifeln ich finde da kein weg. mit Kill Dir geht es leider nicht da sagt er „konnte datei nicht finden“

Bitte hilft mir einer.

Odrner strucktur:

-Hauptordner-
—Exceldatei inclusive Makro
—Personal Ordner—
------namem & " " & vorname Ordner -------
------Andere Dateien die gelöscht werden
—Probetag—
—Ist Leer

Ich hoffe das gibt einem ein bissen den überblick.

Liebe Grüße
Leo

Ich hab mir ein code zusammen gestellt der bis auf die letzte
zeile auch funktioniert.
Wenn der Ordner Existiert Kopiert er korrekt alles in den
neuen ordner, löscht alle dateien die in dem ordner drin sind.
Aber dann sobald er RmDir machen soll kommt die fehler
meldung:

Laufzeitfehler ‚75‘:
Fehler beim Zugriff auf Pfad/Datei

Hallo leo,

was siehst du im Explorer, natürlich muß im Explorer eingestellt sein, alles anzuzeigen, Systemdateien, versteckte datei usw.
Ist der Ordner leer?

Propier dann mal RmDir bei Start–Ausführen. Wenn das auch schiefgeht kann es am Leerzeichen liegen zwischen Namen und Vornamen.

Ich bin noch mit der guten alten 8.3 Dateinamenordnung aufgewachsen, da gabs so Ärger nicht weil Leerzeichen im Namen verboten waren.

Am besten änderst du das Leerzeichen ab in Unterstrich o.ä.

Oder mußt halt mit Gänsefüßchen, manchmal auch Hochkommas arbeiten .

Vielleicht ist das auch ein netzwerk und du hast nur das Recht in dem Verzeichnis Dateien zu löschen aber nicht den Ordner selbst. Naja, sehr viel Sinn macht dies nicht.

Gruß
Reinhard

Also ich habe gerade nur den code:

RmDir (pfad & „\Personal\Akremi Sliem“)
in einer sub drin gehabt und da klappt es, da löscht er den Ordner.

also muss es irgendwas damit zu tun haben weil er kurz vorher noch in dem ordner gearbeitet hat.

Sub KOPIERORDNER()
Dim fso, fld As Object
Set fso = CreateObject("Scripting.FileSystemObject")

Dim pfad As String
pfad = ThisWorkbook.Path

'Personal Datei Löschen
If Dir(pfad & "\Personal\" & namem & " " & vorname & "\") "" Then
 Set fld = fso.GetFolder(pfad & "\Personal\" & namem & " " & vorname & "\")
 fld.Copy (pfad & "\Probetage\")
 Kill (pfad & "\Personal\" & namem & " " & vorname & "\*.\*")
 DELETEORDNER
End If
Sub End

Sub DELETEORDNER()
Dim pfad As String
pfad = ThisWorkbook.Path
ChDir (pfad)
RmDir (pfad & "\Personal\Akremi Sliem\")
End Sub

Also wenn ich zuert KOPIERORDNER starte kommt die fehler meldung
„Laufzeitfehler 75 Fehler beim zugriff auf Pfad/Datei“
Wenn ich DELETEORDNER alleine starte löscht er den Ordner.

Ich versteh nicht wo das problem ist?

Hallo Leo,

jetzt bin ich überfragt.

ChDir kann u.U. alleine falsch laufen, besser ist eine Zeile vorher
ChDrive „C“
(ja, ohne Doppelpunkt) zu schreiben, ist sicherer.

Vielleicht ist Vba zu schnell, d.h. RmDir will was machen, kann das aber nicht weil Kill noch den Ordner „blockiert“.
Setze halt mal zwischen Kill und Deleteordner eine Zeitwarteschleife oder einfacher, eine MsgBox.

Zur Warteschleife, kennst du „sleep“? ist API.
Google mal nach
sleep Private declare alias
dann kriegste die API-Deklaration für sleep, die schreibste zuoberst ins Modul.

Im Code dann nur

Sleep 5000

Sind Millisekunden, also 5 Sec Wartezeit. Finde ich bequemer als Wait o.ä.

Gruß
Reinhard

Dim pfad As String
pfad = ThisWorkbook.Path
ChDrive "C"
Sleep 5000
RmDir (pfad & "\Personal\Akremi Sliem\")

Ne hat nichts geholfen leider genau den gleichen fehler…

Wie gesagt alleine klappt es

Ne hat nichts geholfen leider genau den gleichen fehler…

Wie gesagt alleine klappt es

Hallo Leo,

ich weiß echt nicht was bei dir vorliegt.

Ich habe Office2000 auf WinXP.

Ich habe in C:\Test den Unterordner „Testen und Testen“ angelegt.
Dahinein hab ich paar beliebige Dateien kopiert.

Dann habe ich die Prozedur KOPIERORDNER gemäß nachfolgenden Codes ausgeführt. Anschließend war der Unterordner wech, fehlerfrei.

Teste das mal bei dir, wenn es da nicht klappt, oha. Wenn aber, muß man mal schauen ob es an den deaktivierten Codezeilen liegt, was ich aber gar nicht glauben kann.

Egal, teste mal und berichte, dann schaut man weiter.

Und zu ChDrive, war mir schon klar daß es daran nicht liegen wird, aber wenn man sowieso am Rumraten ist muß man auch alle Kleinigkeiten ggfs. verbessern.
Und persönlich hatte ich noch nie probleme nur mit dem Einsatz von ChDir. Aber ich weiß vom Mitlesen her in Foren, wenn man da rumhüpft zwischen Laufwerken KANN es u.U. dazu kommen, daß
ChDir „C;\irgendwas“
schiefläuft.

Da ich bei unklaren Sachen gerne auf der sicheren Seite bin, schreibe ich das halt so:
CHDrive „C“
ChDir „C;\irgendwas“

Natürlich ist das nur Wirkungsbekämpfung, grundlegend besser wäre s besser, ich wüßte warum ChDir sich falsch verhält und bei welchen Konstellationen. Naja, leider weiß ich das nicht.
Ups, sorry, kam wiedermal in Plauderlaune, macht aber nix, brauchst es ja nicht zu lesen :smile:

Gruß
Reinhard

Sub KOPIERORDNER()
Dim fso, fld As Object, pfad As String
Set fso = CreateObject("Scripting.FileSystemObject")
pfad = "C:\test"
'Personal Datei Löschen
'If Dir(pfad & "\Personal\" & namem & " " & vorname & "\") "" Then
 'Set fld = fso.GetFolder(pfad & "\Personal\" & namem & " " & vorname & "\")
 'fld.Copy (pfad & "\Probetage\")
 Kill (pfad & "\Testen und Testen\*.\*")
 DELETEORDNER
'End If
End Sub

Sub DELETEORDNER()
Dim pfad As String
pfad = "C:\test"
ChDir pfad
RmDir pfad & "\Testen und Testen"
End Sub

Ich hab den fehler gefunden. weil so wie du es gemacht hast, hat es bei mir auch geklappt und der punkt ist:

Set fld = fso.GetFolder(pfad & "\Personal\" & namem & " " & vorname & "\")

Ich muss bevor ich den ordner löschen will fld wieder leeren, denn er greift auf den ordner zu den ich löschen will. also muss ich vorher.

 Set fld = "Nothing"

oder so ähnlich damit er nicht mehr auf den ordner zu greift :wink:

vielen dank :smiley:

liebe grüße
Leo

Ok das hat doch nichts geholfen mit Set fdl = Nothing, aber dafür hat sleep 10000 geholfen.

das ist wahrscheinlich weil das FSO so lange braucht um die sachen zu kopieren und dann zu löschen und vba ist allerdings schneller und versucht schon den ordner zu löschen bevor FSO fertig ist.