Ms access MS Access VBA删除空文件夹

Ms access MS Access VBA删除空文件夹,ms-access,vba,Ms Access,Vba,我有一个需要通过Access程序定期删除的文件夹路径列表。我只想在所有子文件夹都为空时删除它们。如何通过VBA删除空文件夹?这是我的代码,但它没有任何作用 我称之为: PrepareDirModified ("C:\Users\xxxxxxx\Desktop\New folder\TEST123\test456") 以下是主要的子项: Public Sub PrepareDirModified(dirStr As String) On Error Resume Next If Righ

我有一个需要通过Access程序定期删除的文件夹路径列表。我只想在所有子文件夹都为空时删除它们。如何通过VBA删除空文件夹?这是我的代码,但它没有任何作用

我称之为:

PrepareDirModified ("C:\Users\xxxxxxx\Desktop\New folder\TEST123\test456")
以下是主要的子项:

Public 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
Public Sub PrepareDirModified(dirStr作为字符串)
出错时继续下一步
如果正确(dirStr,1)“\”则dirStr=dirStr&“\”
Kill dirStr&“*.*”
RmDir dirStr
MkDir-dirStr
错误转到0
端接头

我使用FileScript对象删除了一系列文件,然后删除了文件夹,比如

   Dim FSO As Object   

   Set FSO = CreateObject("scripting.filesystemobject")
   On Error GoTo FileError
            'Delete files
   FSO.deletefile mypath & "\*.*", True
            'Delete subfolders
   FSO.deletefolder mypath & "\*.*", True
下面的内容是从罗恩的优秀网站上抄来的

您可以使用同一对象检查文件夹是否存在

Dim FSO As Object
Dim FolderPath As String

Set FSO = CreateObject("scripting.filesystemobject")

FolderPath = "C:\Users\Ron\test"
If Right(FolderPath, 1) <> "\" Then
    FolderPath = FolderPath & "\"
End If

If FSO.FolderExists(FolderPath) = False Then
    MsgBox "Folder doesn't exist"
Else
    MsgBox "Folder exist"
End If
为了遍历文件夹,我将使用这个脚本

    Public Sub DeleteEmptyFolders(ByVal strFolderPath As String)
   Dim fsoSubFolders As Folders
   Dim fsoFolder As Folder
   Dim fsoSubFolder As Folder

   Dim strPaths()
   Dim lngFolder As Long
   Dim lngSubFolder As Long

   DoEvents

   Set m_fsoObject = New FileSystemObject
   If Not m_fsoObject.FolderExists(strFolderPath) Then Exit Sub

   Set fsoFolder = m_fsoObject.GetFolder(strFolderPath)

   On Error Resume Next

   'Has sub-folders
   If fsoFolder.SubFolders.Count > 0 Then
        lngFolder = 1
        ReDim strPaths(1 To fsoFolder.SubFolders.Count)
        'Get each sub-folders path and add to an array
        For Each fsoSubFolder In fsoFolder.SubFolders
            strPaths(lngFolder) = fsoSubFolder.Path
            lngFolder = lngFolder + 1
        Next fsoSubFolder

        lngSubFolder = 1
        'Recursively call the function for each sub-folder
        Do While lngSubFolder < lngFolder
           Call DeleteEmptyFolders(strPaths(lngSubFolder))
           lngSubFolder = lngSubFolder + 1
        Loop
    End If

    'No sub-folders or files
    If fsoFolder.Files.Count = 0 And fsoFolder.SubFolders.Count = 0 Then
        fsoFolder.Delete
    End If
    End Sub
Public子DeleteEmptyFolders(ByVal strFolderPath作为字符串)
将fsoSubFolders作为文件夹进行调整
Dim fsoFolder As文件夹
将fsoSubFolder设置为文件夹
Dim strPaths()
暗长
将lngSubFolder变暗为长
多芬特
设置m_fsoObject=新文件系统对象
如果m_fsoObject.FolderExists(strFolderPath)不是m_fsoObject.FolderExists,则退出Sub
Set fsoFolder=m_fsoObject.GetFolder(strFolderPath)
出错时继续下一步
'具有子文件夹
如果fsoFolder.SubFolders.Count>0,则
lngFolder=1
重拨strPaths(1到fsoFolder.SubFolders.Count)
'获取每个子文件夹路径并添加到数组
对于fsoFolder.SubFolders中的每个fsoSubFolder
strPaths(lngFolder)=fsoSubFolder.Path
lngFolder=lngFolder+1
下一个fsoSubFolder
lngSubFolder=1
'递归调用每个子文件夹的函数
在lngSubFolder

从此处复制

谢谢-我将如何修改以使其仅删除空的子文件夹?请查看编辑-检查。在“文件存在”选项中,如果不存在,则可以安全地删除该文件夹。谢谢。不过,这是在寻找一个特定的文件名。我想传递一个根文件夹,然后删除根文件夹中的所有空子文件夹。请参阅“通过文件夹添加迭代”功能。
    Public Sub DeleteEmptyFolders(ByVal strFolderPath As String)
   Dim fsoSubFolders As Folders
   Dim fsoFolder As Folder
   Dim fsoSubFolder As Folder

   Dim strPaths()
   Dim lngFolder As Long
   Dim lngSubFolder As Long

   DoEvents

   Set m_fsoObject = New FileSystemObject
   If Not m_fsoObject.FolderExists(strFolderPath) Then Exit Sub

   Set fsoFolder = m_fsoObject.GetFolder(strFolderPath)

   On Error Resume Next

   'Has sub-folders
   If fsoFolder.SubFolders.Count > 0 Then
        lngFolder = 1
        ReDim strPaths(1 To fsoFolder.SubFolders.Count)
        'Get each sub-folders path and add to an array
        For Each fsoSubFolder In fsoFolder.SubFolders
            strPaths(lngFolder) = fsoSubFolder.Path
            lngFolder = lngFolder + 1
        Next fsoSubFolder

        lngSubFolder = 1
        'Recursively call the function for each sub-folder
        Do While lngSubFolder < lngFolder
           Call DeleteEmptyFolders(strPaths(lngSubFolder))
           lngSubFolder = lngSubFolder + 1
        Loop
    End If

    'No sub-folders or files
    If fsoFolder.Files.Count = 0 And fsoFolder.SubFolders.Count = 0 Then
        fsoFolder.Delete
    End If
    End Sub