我想知道是否可以重写这段代码:
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的情况下完成它?
答案 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“子文件夹名称” 结束