VBA遍历路径下的所有文件(含子目录)

VBA遍历文件,及其子目录下所有文件

Sub 示例代码()

getAllFiles ("D:\")
getAllFiles2 ("D:\")
getAllFiles3 ("D:\")

End Sub


'
'利用Dir遍历目录下的所有文件名,不含子目录的
'这种方法下,传入的fpath值末尾一定要带“\”符号,否则会报错,后面两种方法则可带可不带
'
Function getAllFiles(fpath As String)
    filename = Dir(fpath) '获取路径下的第一个文件名(仅有文件名,不含完整路径)
    Do While filename <> ""
        Debug.Print (filename)
        filename = Dir '获取下一个文件
    Loop
End Function

'
'利用FSO遍历目录下的所有文件名及其路径,不包含子目录的
'
'
Function getAllFiles2(fpath As String)
    Dim OFso As Object, baseFolder As Object, ofile As Object
    Set OFso = CreateObject("Scripting.FileSystemObject")
    Set baseFolder = OFso.GetFolder(fpath)
    For Each ofile In baseFolder.Files
    Debug.Print ofile.Path
Next
End Function

'
'利用FSO遍历目录下的所有文件名及其路径,包含子目录的
'
'
Function getAllFiles3(fpath As String)
    Dim fso As New FileSystemObject '此处与前面getAllFiles2中使用了不同的思路
    Dim src_folder As Folder '使用Floder对象需要在菜单栏——工具——引用中勾选Microsoft Scripting Runtime
    Set src_folder = fso.GetFolder(fpath) '将String类型的路径转换成Folder对象
    
    Dim f As File, fld As Folder
    
    For Each f In src_folder.Files '遍历目录下所有文件
        Debug.Print (f.Path)
    Next
    
    For Each fld In src_folder.SubFolders              '遍历子文件夹
        'Debug.Print (fld.Path)
        getAllFiles3 (fld.Path)                       '嵌套调用自身
    Next
End Function

 

法2则可带可不带。

法2参考https://blog.csdn.net/weixin_45385543/article/details/125487567

posted @ 2022-08-01 20:45  Levice  阅读(4005)  评论(0编辑  收藏  举报