不使用FileSystemObject删除目录及其内容(文件,子目录)

时间:2014-08-20 09:55:52

标签: vba excel-vba filesystemobject excel

我想知道是否可以重写这段代码:

Private Sub PrepareDir(ByVal dir As String)
    Dim fso As New FileSystemObject
    If fso.FolderExists(dir) Then Call fso.DeleteFolder(dir, True)
    Call fso.CreateFolder(dir)
End Sub

使用VBA语句:Kill,MkDir等。大多数"困难"部分内容 - 删除非空目录。使用FSO可以轻松完成,但如何在没有FSO的情况下完成它?

3 个答案:

答案 0 :(得分:8)

这段ccode使用RmDir删除文件夹。 AFAIK,RmDir无法删除文件夹,除非它是空的,所以我们先清除文件夹中的内容然后删除目录。

Private Sub PrepareDirModified(dirStr As String)
On Error Resume Next
    If Right(dirStr, 1) <> "\" Then dirStr = dirStr & "\"
    Kill dirStr & "*.*" 
    RmDir dirStr
    MkDir dirStr
On Error GoTo 0
End Sub

希望这有帮助。

答案 1 :(得分:4)

OP表示他们想“不用FSO”来重写代码,但这没有道理。

如果目标是减少代码量,只需将其设为单行

CreateObject("Scripting.FileSystemObject").DeleteFolder "x:\myFolder"

根据要求,此永久会删除文件夹及其内容。


更多信息:

答案 2 :(得分:0)

无需删除用于删除文件夹的文件。 选择路径并循环搜索子文件夹,然后可以删除该子文件夹。 下面是示例:复制过程并粘贴到模块上

公共函数Delete_Folder(ByVal FldrName作为字符串) 昏暗的fso,FSfolder作为对象

Set fso = CreateObject("Scripting.FileSystemObject")
Set FSfolder = fso.GetFolder(Application.DefaultFilePath)' This is My Documents folder path

'您可以替换为原始文件夹路径

For Each Folder In FSfolder.SubFolders
    'Debug.Print Folder.Name
    If Folder.Name = FldrName Then
        Folder.Delete
        Exit For
    End If
Next

结束功能

子测试() Delete_Folder“子文件夹名称” 结束