Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

VBA fso.deletefolder...

Forumthread: VBA fso.deletefolder...

VBA fso.deletefolder...
23.01.2004 09:19:01
PeterB
Hallo phorum,
ich habe ein kleines problem: ich möchte (nach entscheidung über eine dateigröße) einen ordner auf meiner platte löschen: mit
fso.DeleteFolder (pProdName & "rimage\grund\" & Path & "\" & folder, True)
will ich ihn zwingen (fso...., TRUE) den ordner zu löschen. ohne klammern macht er mir das aber nicht in der laufzeit (er wirft fehler 70 - Read-Only, WARUM???)
^--- das war die erste frage ;-)
und mit klammern meckert er beim syntax-check, daß er ein = erwartet. das versteh ich nicht :-(
kann mir jemand helfen??
danke
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA fso.deletefolder...
23.01.2004 10:41:41
Dan
Hallo,
- die erste Frage : bei mir hat foldender Code funktioniert auch in der Luafzeit ...
- die zweite Frage : im Code
Option Explicit

Sub Test()
Dim Fso As FileSystemObject
Dim sFile As String
On Local Error GoTo ErrH
Set Fso = New FileSystemObject
sFile = "C:\Temp\aaa.xls"
Fso.DeleteFile FileSpec:=sFile, Force:=True
' oder ohne den Parameter Namen :
'Fso.DeleteFile sFile, True
' mit Klammern koennte man es schreiben, falls DeleteFile eine 

Function ware
' und einen Wert zuruckgeben hatte :
' vReturnedValue = Fso.DeleteFile(FileSpec:=sFile, Force:=True)
Exit Sub
ErrH:
MsgBox "Error " & Err.Number, vbCritical
End
End Sub

Anzeige
AW: VBA fso.deletefolder...
23.01.2004 11:29:40
PeterB
hallo dan,
danke für deine antwort.
ich habe aber einen ordner zu löschen. das file, das im ordner selbst liegt wird gelöscht, nur der ordner verbleibt in der struktur (wenn auch leer).
kannst du mir da weiterhelfen??
grüße
AW: VBA fso.deletefolder...
23.01.2004 11:43:57
Dan
Hallo,
Entschuldige, ich sollte vorsichtiger lessen. Ich habe File mit Folder verwechselt :-(
Folgender Code hat aber bei mir auch gut funktioniert. D.

Sub Test2()
Dim Fso As FileSystemObject
Dim sFolder As String
On Local Error GoTo ErrH
Set Fso = New FileSystemObject
sFolder = "C:\Temp\ProtectedToDelete"
Fso.DeleteFolder FolderSpec:=sFolder, Force:=True
Exit Sub
ErrH:
MsgBox "Error " & Err.Number, vbCritical
End
End Sub

Anzeige
AW: VBA fso.deletefolder...
23.01.2004 13:21:59
PeterB
Hi Dan,
kein prob ;-)
kann es sein, daß dein code so nicht geht? bei mir muß der : beim FolderSpec:= ... raus (bei Force natürlich auch)...
trotzdem geht das bei mir nicht! das ist doch zum Haare raufen!! kann es mit meinem OS (Win-XP Pro) zu tun haben??
ich hab auch schon die lese-rechte manuell geändert auf nicht R/W-geschützt (also da MUSS es eigentlich gehen...)
/ratlos\ peter
Anzeige
Bin weitergekommen, trotzdem problem
23.01.2004 13:42:29
PeterB
Hallo Dan,
ich bin etwas weitergekommen: er wirft nicht mehr 70, sondern 75 (path/file access error) als fehlermeldung, aber damit kann ich trotzdem nix anfangen :(
AW: Bin weitergekommen, trotzdem problem
23.01.2004 15:39:27
Dan
Hallo,
es ist aber merkwurdig. Hier ein Code wo ich die Fehler anders behandeln versucht habe. Versuch es und schreib mir ob es lauft oder wo liegt das Problem. Es fallt mir nur noch ein die Scripting Library zu ersetsen (erneuern)? D.

Sub Test3()
Dim oFso As Object
Dim oFld As Object
Dim sPath As String
Err.Clear
On Local Error Resume Next
Set oFso = VBA.CreateObject("Scripting.FileSystemObject")
If (oFso Is Nothing) Then MsgBox "FileSystemObject is Nothing.", vbCritical, "Error": End
sPath = "C:\Temp\ProtectedToDelete"
Set oFld = oFso.GetFolder(FolderPath:=sPath)
If (oFld Is Nothing) Then MsgBox "Folder is Nothing.", vbCritical, "Error": End
oFld.Delete
' End of Code
' Fehler die noch auftauchen koenneten :
If (Err.Number <> 0) Then
Dim vntErrNr As Variant
Dim vntErrDesc As Variant
' Fehler merken
vntErrNr = Err.Number
vntErrDesc = Err.Description
Err.Clear
' Permission denied, Folder ist nur "zum lesen"
' oder ist gerade benutzt
If (vntErrNr = 70) Then
' wir versuchen es mit DeleteFolder Methode
oFso.DeleteFolder FolderSpec:=sPath, Force:=True
' if wieder Error : es hat keinen Sinn es weiter zu versuchen, man muss den Folder frei machen
' z.B. einen File schliessen, der sich in deisem Folder befindet und geoffnet ist usw.
If (Err.Number <> 0 And Err.Number = vntErrNr) Then
MsgBox "Es ist wieder der Fehler " & vntErrNr & " aufgetaucht." & vbCrLf & _
vntErrDesc, vbCritical, "Fatal Error": End
ElseIf (Err.Number <> 0) Then
MsgBox "Runtime. Error Nr. " & vntErrNr & " occured " & vbCrLf & _
vntErrDesc, vbCritical, "Fatal Error": End
End If
Else
MsgBox "Runtime. Error Nr. " & vntErrNr & " occured " & vbCrLf & _
vntErrDesc, vbCritical, "Fatal Error": End
End If
End If
End Sub

Anzeige
AW: Bin weitergekommen, trotzdem problem
23.01.2004 15:49:39
Dan
Ich gehe jetzt nach Hause :-) Grusse Dan.
DDMAIL@seznam.cz
AW: Bin weitergekommen, trotzdem problem
26.01.2004 14:56:06
peterb
hi dan,
vielen dank für deine hilfe, aber ich glaube, es liegt an meiner platte / meinem OS:
scheinbar geht es auf anderen PC's, deswegen mach ich mir bei mir keine sorgen mehr.
tschö peter
;
Anzeige

Infobox / Tutorial

VBA fso.deletefolder effektiv nutzen


Schritt-für-Schritt-Anleitung

Um einen Ordner in VBA mit der fso.deletefolder-Methode zu löschen, gehe wie folgt vor:

  1. Referenz zur Scripting-Bibliothek hinzufügen:

    • Öffne den VBA-Editor (ALT + F11).
    • Klicke auf ExtrasVerweise.
    • Aktiviere die Microsoft Scripting Runtime.
  2. Code zum Löschen eines Ordners:

    Sub DeleteFolder()
       Dim fso As Object
       Set fso = CreateObject("Scripting.FileSystemObject")
       Dim folderPath As String
    
       folderPath = "C:\Temp\DeinOrdner"
       On Error Resume Next
       fso.DeleteFolder folderPath, True
    
       If Err.Number <> 0 Then
           MsgBox "Fehler: " & Err.Description
       End If
    End Sub
  3. Ausführen:

    • Führe das Makro aus, um den angegebenen Ordner zu löschen.

Häufige Fehler und Lösungen

  • Fehler 70 - Zugriff verweigert:

    • Dieser Fehler tritt häufig auf, wenn der Ordner schreibgeschützt ist oder von einer anderen Anwendung verwendet wird. Stelle sicher, dass der Ordner nicht geöffnet ist und ändere die Berechtigungen.
  • Fehler 75 - Pfad/Dateizugriffsfehler:

    • Dies kann passieren, wenn der angegebene Pfad nicht existiert. Überprüfe den Pfad auf Tippfehler oder stelle sicher, dass der Ordner vorhanden ist.
  • Syntaxfehler:

    • Achte darauf, dass beim Aufruf von Methoden wie fso.DeleteFolder die Parameter korrekt übergeben werden. Beispielsweise ist die Verwendung von FolderSpec: nicht notwendig.

Alternative Methoden

Falls die fso.deletefolder-Methode nicht funktioniert, kannst du auch folgende Alternativen versuchen:

  1. Shell-Befehl:

    Sub DeleteFolderShell()
       Dim folderPath As String
       folderPath = "C:\Temp\DeinOrdner"
       Shell "cmd /c rmdir /s /q """ & folderPath & """", vbHide
    End Sub
  2. Windows API:

    • Du kannst auch die Windows-API verwenden, um einen Ordner zu löschen, allerdings ist dies komplexer und erfordert zusätzliche Deklarationen.

Praktische Beispiele

Hier sind einige praktische Beispiele für die Verwendung von fso.deletefolder:

  • Löschen eines spezifischen Ordners:

    Sub DeleteSpecificFolder()
       Dim fso As Object
       Set fso = CreateObject("Scripting.FileSystemObject")
       Dim folderPath As String
    
       folderPath = "C:\Temp\OrdnerZuLöschen"
       If fso.FolderExists(folderPath) Then
           fso.DeleteFolder folderPath, True
           MsgBox "Ordner erfolgreich gelöscht."
       Else
           MsgBox "Ordner existiert nicht."
       End If
    End Sub
  • Löschen aller Unterordner in einem Verzeichnis:

    Sub DeleteAllSubfolders()
       Dim fso As Object
       Set fso = CreateObject("Scripting.FileSystemObject")
       Dim parentFolder As String
    
       parentFolder = "C:\Temp"
       Dim folder As Object
    
       For Each folder In fso.GetFolder(parentFolder).SubFolders
           fso.DeleteFolder folder.Path, True
       Next folder
       MsgBox "Alle Unterordner wurden gelöscht."
    End Sub

Tipps für Profis

  • Fehlerbehandlung: Verwende On Error Resume Next, um Fehler während des Löschvorgangs zu ignorieren und um diese später abzufangen. Dies hilft, deine Makros stabiler zu machen.

  • Automatisierung: Du kannst die fso.deletefolder-Methode in Kombination mit anderen VBA-Prozeduren verwenden, um automatisierte Wartungsaufgaben zu erstellen, wie das regelmäßige Löschen temporärer Dateien.

  • Testen in einer sicheren Umgebung: Bevor du Makros zum Löschen von Ordnern verwendest, teste sie in einer sicheren Umgebung, um Datenverluste zu vermeiden.


FAQ: Häufige Fragen

1. Was ist der Unterschied zwischen fso.deletefolder und rmdir? fso.deletefolder ist eine VBA-Methode, die Teil der Scripting Runtime ist, während rmdir ein Shell-Befehl ist, der über die Eingabeaufforderung ausgeführt wird.

2. Wie kann ich einen Ordner löschen, der schreibgeschützt ist? Stelle sicher, dass du die Berechtigungen des Ordners änderst. Du kannst auch den Force-Parameter in der fso.deletefolder-Methode verwenden, um das Löschen zu erzwingen.

3. Kann ich fso.deletefolder verwenden, um einen auf einem Netzlaufwerk befindlichen Ordner zu löschen? Ja, du kannst fso.deletefolder auch für Netzlaufwerke verwenden, solange du die nötigen Berechtigungen hast. Achte auf die richtige Netzwerkkonfiguration.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige