【VBA】【增强版】【收藏备用】遍历文件夹内所有文件模块V5

 N次修改了,此模块应该比较健壮吧,特点:

1、可遍历目录下所有文件

2、可筛选文件类型,可限定文件名关键词

3、遍历目录(文件夹)允许存在小数点.

4、一步到位,不用编写2次循环(即先遍历出目录,再遍历文件)



Sub searchFile()
'   ---------------遍历文件夹内所有文件-----------------------------
   FileType = ".txt"  '查找文件类型
   FileKeyword = "svr"  '进一步限定文件范围,当然也可以继续添加限定条件
    '对话框方式选择路径
    Dim fd As FileDialog
    Set fd = Application.FileDialog(msoFileDialogFolderPicker)
    If fd.Show = -1 Then
        sFolderPath = fd.SelectedItems(1)
        Set fd = Nothing
    Else
        Set fd = Nothing
        Exit Sub
    End If
    
    Dim file() As String, retFile() As String, fullPath$
    Dim i%, k%, t%, f$
    i = 1:    k = 1:    t = 1
    
    ReDim file(1 To i)
    file(1) = sFolderPath & "\"
    '相对而言i父目录,k为对应子目录
    Do Until i > k
        Debug.Print "file(" & i & ")=" & file(i)
        f = Dir(file(i), vbDirectory)
            Do Until f = ""
                Debug.Print "f1=" & f
                If InStr(f, FileType) > 0 And InStr(f, FileKeyword) > 0 Then
                    ReDim Preserve retFile(1 To t)
'                    把遍历得到的文件存放到retFile(t)中
                    retFile(t) = file(i) & f
                    t = t + 1
                ElseIf f <> "." And f <> ".." Then
                    fullPath = file(i) & f & "\"
                    If FileFolderExists(fullPath) Then
                        k = k + 1
                        ReDim Preserve file(1 To k)
                        file(k) = fullPath
                    End If
                End If
                f = Dir
            Loop
        i = i + 1
    Loop
 
 
End Sub
 
 
 
Function FileFolderExists(strFullPath As String) As Boolean
 
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    If fso.folderExists(strFullPath) Then FileFolderExists = True
    Set fso = Nothing
 
End Function

 

要在VBA遍历文件夹中的所有文件,你可以使用FileSystemObject对象和Folder对象。下面是一个示例代码,可以帮助你完成这个任务: ```vba Sub TraverseFolder() Dim fso As Object Dim folder As Object Dim subfolder As Object Dim file As Object ' 创建一个FileSystemObject对象 Set fso = CreateObject("Scripting.FileSystemObject") ' 设置要遍历文件夹路径 Set folder = fso.GetFolder("C:\YourFolderPath") ' 遍历文件夹中的所有文件 For Each file In folder.Files ' 在这里处理每个文件,例如打印文件名 Debug.Print file.Name Next file ' 遍历文件夹中的所有子文件夹(递归) For Each subfolder In folder.Subfolders TraverseSubfolder subfolder Next subfolder ' 释放对象 Set file = Nothing Set subfolder = Nothing Set folder = Nothing Set fso = Nothing End Sub Sub TraverseSubfolder(subfolder As Object) Dim file As Object ' 遍历文件夹中的所有文件 For Each file In subfolder.Files ' 在这里处理每个文件,例如打印文件名 Debug.Print file.Name Next file ' 遍历文件夹中的所有子文件夹(递归) For Each subfolder In subfolder.Subfolders TraverseSubfolder subfolder Next subfolder End Sub ``` 请注意,你需要将代码中的`"C:\YourFolderPath"`替换为你要遍历的实际文件夹路径。这个示例代码将遍历指定文件夹中的所有文件,并打印每个文件的名称。你可以根据自己的需求在处理文件的部分进行适当的修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值