在不使用FileSystemObject的情况下删除目录及其内容(文件,子目录)

Eld*_*rov 6 excel vba excel-vba filesystemobject

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

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
Run Code Online (Sandbox Code Playgroud)

使用VBA语句:Kill,MkDir等.这个中最"困难"的部分 - 删除非空目录.使用FSO可以轻松完成,但如何在没有FSO的情况下完成它?

Pau*_*cis 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
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助.

  • 我有点怀疑如果目录中有目录,它会递归地工作 (2认同)

ash*_*awg 6

OP表示他们想“不使用FSO ” 重写代码,但这没有任何意义。

如果目标是减少代码量,只需将其变成单一格式即可

CreateObject("Scripting.FileSystemObject").DeleteFolder "x:\myFolder"
Run Code Online (Sandbox Code Playgroud)

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


更多信息: