VBA: 如何用VBA遍历文件夹(含子文件夹)里的所有文件

发布时间:2024年01月18日

目录

0 原始文件

1 step1:遍历文件夹(不包含子文件)内的文件数

2 step2: 遍历文件夹内的所有子文件夹的名字

3? step3 遍历文件夹的(含子文件)内的所有文件

4 step4 遍历文件夹的(含子文件)内的所有文件夹和文件


0 原始文件夹和文件情况

1 step1:遍历文件夹(不包含子文件)内的文件数

  • 遍历文件夹内的文件数
  • 但是并不遍历子文件
Function file_dir1()
    fp = "C:\Users\Administrator\Desktop\ppp\*.*"

    fn = Dir(fp)
    Debug.Print fn   '避免会少第1个文件
    Do While fn <> ""
       fn = Dir
       Debug.Print fn
    Loop
    
End Function

2 step2: 遍历文件夹内的所有子文件夹的名字

  • 遍历文件夹的所有子文件的名字
  • 可以遍历所有文件夹,及其子文件夹
  • 只取得文件夹的名字,不管文件
'----------------step2---------------------------------------------
Sub Folder2()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '确定根目录
    ff = "C:\Users\Administrator\Desktop\ppp"
    '遍历根目录下的子文件夹
    Dim folder As Object ' 当前正在遍历的文件夹
    Set folder = fso.GetFolder(ff)

    Call SubProcessFolder2(folder)
    
End Sub
 

Sub SubProcessFolder2(folder)
    '子文件夹
    Dim subFolder As Object
    For Each subFolder In folder.subfolders
        Debug.Print subFolder.Path
        ' 如果还有更深层次的子文件夹,则进行递归调用
        If subFolder.subfolders.Count > 0 Then
            Call SubProcessFolder2(subFolder)
        End If
    Next subFolder
End Sub

3? step3 遍历文件夹的(含子文件)内的所有文件

  • 遍历文件夹的,且包含含子文件内
  • 所有文件

'-------------step3---------------------------------------------

Sub Folder3()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '确定根目录
    ff = "C:\Users\Administrator\Desktop\ppp"
    '遍历根目录下的文件
    Call file3(ff)

    '遍历根目录下的子文件夹
    Dim folder As Object ' 当前正在遍历的文件夹
    Set folder = fso.GetFolder(ff)

    Call SubProcessFolder3(folder)
    
End Sub
 

Sub file3(folder)
    fp = folder & "\*.*"
    fn = Dir(fp)
    Do While fn <> ""
       Debug.Print folder & "\" & fn
       fn = Dir()   '这句话应该放在打印后面
    Loop
End Sub


Sub SubProcessFolder3(folder)
    '子文件夹
    Dim subFolder As Object
    For Each subFolder In folder.subfolders
        Call file3(subFolder)
        
        ' 如果还有更深层次的子文件夹,则进行递归调用
        If subFolder.subfolders.Count > 0 Then
            Call SubProcessFolder3(subFolder)
        End If
    Next subFolder
End Sub

4 step4 遍历文件夹的(含子文件)内的所有文件夹和文件

  • 遍历文件夹的,且包含含子文件内
  • 包含文件夹
  • 也包含文件
'--------step4---------------------------------------------


Sub Folder4()
    Dim fso As Object
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    '确定根目录
    ff = "C:\Users\Administrator\Desktop\ppp"
     Debug.Print ff
    '遍历根目录下的文件
    Call file4(ff)

    '遍历根目录下的子文件夹
    Dim folder As Object ' 当前正在遍历的文件夹
    Set folder = fso.GetFolder(ff)

    Call SubProcessFolder4(folder)
    
End Sub
 

Sub file4(folder)
    fp = folder & "\*.*"
    fn = Dir(fp)
    Do While fn <> ""
       Debug.Print fn   'folder & "\" & fn
       fn = Dir()   '这句话应该放在打印后面
    Loop
End Sub


Sub SubProcessFolder4(folder)
    '子文件夹
    Dim subFolder As Object
    For Each subFolder In folder.subfolders
        Debug.Print subFolder.Path
        Call file4(subFolder)
        
        ' 如果还有更深层次的子文件夹,则进行递归调用
        If subFolder.subfolders.Count > 0 Then
            Call SubProcessFolder4(subFolder)
        End If
    Next subFolder
End Sub

文章来源:https://blog.csdn.net/xuemanqianshan/article/details/135683779
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。