如何用vba删除某个文件夹及其子文件和所有文件?

在VBA中可以使用Kill语句删除文件,但是不能删除文件夹。

如果要在VBA中删除某个文件夹及其子文件和所有文件,可以使用FileSystemObject.对象的DeleteFolder方法或者Folder对象的Delete方法。

用FileSystemObject.对象的DeleteFolder方法代码如下:

Function GetPath() As String
    '声明一个FileDialog对象变量
    Dim oFD As FileDialog
'    '创建一个选择文件对话框
'    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    '创建一个选择文件夹对话框
    Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
    '声明一个变量用来存储选择的文件名或者文件夹名称
    Dim vrtSelectedItem As Variant
    With oFD
        '允许选择多个文件
        .AllowMultiSelect = True
        '使用Show方法显示对话框,如果单击了确定按钮则返回-1。
        If .Show = -1 Then
            '遍历所有选择的文件
            For Each vrtSelectedItem In .SelectedItems
                '获取所有选择的文件的完整路径,用于各种操作
                GetPath = vrtSelectedItem
            Next
            '如果单击了取消按钮则返回0
        Else
        End If
    End With
    '释放对象变量
    Set oFD = Nothing
End Function
Sub QQ1722187970()
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Dim oFolder As Object
    Dim sPath As String
    sPath = GetPath()
    If Len(sPath) Then
        '强制删除,参数True表示不管是否只读的文件都删除
        oFso.DeleteFolder sPath, True
        MsgBox "操作完成!!!"
    End If
End Sub

用Folder对象的Delete方法的代码如下:

Function GetPath() As String
    '声明一个FileDialog对象变量
    Dim oFD As FileDialog
'    '创建一个选择文件对话框
'    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    '创建一个选择文件夹对话框
    Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
    '声明一个变量用来存储选择的文件名或者文件夹名称
    Dim vrtSelectedItem As Variant
    With oFD
        '允许选择多个文件
        .AllowMultiSelect = True
        '使用Show方法显示对话框,如果单击了确定按钮则返回-1。
        If .Show = -1 Then
            '遍历所有选择的文件
            For Each vrtSelectedItem In .SelectedItems
                '获取所有选择的文件的完整路径,用于各种操作
                GetPath = vrtSelectedItem
            Next
            '如果单击了取消按钮则返回0
        Else
        End If
    End With
    '释放对象变量
    Set oFD = Nothing
End Function
Sub QQ1722187970()
    Set oFso = CreateObject("Scripting.FileSystemObject")
    Dim oFolder As Object
    Dim sPath As String
    sPath = GetPath()
    If Len(sPath) Then
        Set oFolder = oFso.getfolder(sPath)
        '强制删除,参数True表示不管是否只读的文件都删除
        oFolder.Delete (True)
        MsgBox "操作完成!!!"
    End If
End Sub

 

       

发表评论