VBA中怎么遍历所选路径中所有文件夹及其子文件夹(多个子文件),并返回所有的最底层的文件夹路径

选择一个路径后,返回所有文件夹中的子文件夹及其子文件夹,也就是每个最下层的文件夹路径。文件夹层数没规律,新手,求解,谢谢各位了

答:执行"获取所有文件夹",按提示操作。文件夹清单会显示在工作表的AB列中。

Sub 获取所有文件夹()
    Dim Directory As String
    With Application.FileDialog(msoFileDialogFolderPicker)
        .InitialFileName = Application.DefaultFilePath & "\"
        .Title = "请选择一个文件夹"
        .Show
        If .SelectedItems.Count = 0 Then
            Exit Sub
        Else
            Directory = .SelectedItems(1)
        End If
    End With
    Cells.ClearContents
    Call RecursiveDir(Directory)
End Sub
Public Sub RecursiveDir(ByVal CurrDir As String)
    Dim Dirs() As String
    Dim NumDirs As Long
    Dim Filesize As Double
    Dim TotalFolders, SingleFolder
    Cells(1, 1) = "目录名"
    Cells(1, 2) = "日期/时间"
    Range("A1:B1").Font.Bold = True
    
    Set TotalFolders = CreateObject("Scripting.FileSystemObject").GetFolder(CurrDir).SubFolders
    Cells(WorksheetFunction.CountA(Range("A:A")) + 1, 1) = CurrDir
    Cells(WorksheetFunction.CountA(Range("B:B")) + 1, 2) = FileDateTime(CurrDir)
    If TotalFolders.Count <> 0 Then
        For Each SingleFolder In TotalFolders
            ReDim Preserve Dirs(0 To NumDirs) As String
            Dirs(NumDirs) = SingleFolder
            NumDirs = NumDirs + 1
        Next
    End If
    For i = 0 To NumDirs - 1
        RecursiveDir Dirs(i)
    Next i
End Sub

温馨提示:内容为网友见解,仅供参考
第1个回答  2018-09-10
Sub Test()
    Dim MyName, Dic, Did, I, T, F, TT, MyFileName
    T = Time
    Set Dic = CreateObject("Scripting.Dictionary")    '创建一个字典对象
    Set Did = CreateObject("Scripting.Dictionary")
    Dic.Add ("C:\Users\Administrator\Desktop\VB.NET\"), ""
    I = 0
    Do While I < Dic.Count
        Ke = Dic.keys   '开始遍历字典
        MyName = Dir(Ke(I), vbDirectory)    '查找目录
        Do While MyName <> ""
            If MyName <> "." And MyName <> ".." Then
                If (GetAttr(Ke(I) & MyName) And vbDirectory) = vbDirectory Then    '如果是次级目录
                    Dic.Add (Ke(I) & MyName & "\"), ""  '就往字典中添加这个次级目录名作为一个条目
                End If
            End If
            MyName = Dir    '继续遍历寻找
        Loop
        I = I + 1
    Loop
    Did.Add ("文件清单"), ""    '以查找D盘My Documents下所有EXCEL文件为例
    For Each Ke In Dic.keys
        MyFileName = Dir(Ke & "*.*")
        Do While MyFileName <> ""
            Did.Add (Ke & MyFileName), ""
            MyFileName = Dir
        Loop
    Next
    For Each Sh In ThisWorkbook.Worksheets
        If Sh.Name = "XLS文件清单" Then
            Sheets("XLS文件清单").Cells.Delete
            F = True
            Exit For
        Else
            F = False
        End If
    Next
    If Not F Then
        Sheets.Add.Name = "XLS文件清单"
    End If
    Sheets("XLS文件清单").[A1].Resize(Did.Count, 1) = WorksheetFunction.Transpose(Did.keys)
    TT = Time - T
    MsgBox Minute(TT) & "分" & Second(TT) & "秒"
End Sub

VBA中怎么遍历所选路径中所有文件夹及其子文件夹(多个子文件),并返回...
答:执行"获取所有文件夹",按提示操作。文件夹清单会显示在工作表的AB列中。Sub 获取所有文件夹() Dim Directory As String With Application.FileDialog(msoFileDialogFolderPicker) .InitialFileName = Application.DefaultFilePath & "\\" .Title = "请选择一个文件夹" .Show If ...

如何用VBA遍历指定目录下的所有子文件夹和文件
Sub 文件夹内遍历法()Dim arr, n&, i&, j&, s$, sh Dim myPath$, myFile Dim cnn As Object, rs As Object, wb As Workbook myPath = ThisWorkbook.Path & "\\"myFile = Dir(myPath & "*.xlsm")n = CreateObject("Scripting.FileSystemObject").GetFolder(myPath).Files.Count - 1...

VBA——显示当前路径下所有文件名(文末含成品)
首先,使用dir函数遍历目录下的文件。基本用法是首次指定文件夹路径后,后续调用会依次返回该目录下的下一个文件名,就像Python中的迭代器。dir遍历完所有文件名后,返回空字符串,再次调用会报错。若指定具体文件路径,dir会返回文件名,不存在则为空。dir功能有局限性,这时引入filesystemobject(fso)辅助。

如何用VBA遍历指定目录下的所有子文件夹Excel文件的所有工作表
ThisWorkbook.Name, False)For i = 0 To UBound(FileArr ) MsgBox FileArr (i) 'Set WB = Workbooks.Open(FileArr (I)) '\/\/打开工作簿 '你的代码 'WB.Close true '\/\/保存NextEnd Sub'***'功能: 查找指定文件夹含子文件夹内所有文件名或文件夹名(含路径)'函数名:...

如何用excel vba按关键字选择性的遍历文件夹搜索文件?
Excel怎样批量提取文件夹和子文件夹所有文件 怎样批量提取文件夹下文件名

VBA遍历多级文件夹对文件中的内容进行查询(dir循环遍历)
先设置一个场景:现在有一个文件夹test,其下有两个子文件夹A,B,A中有一些TXT文本,B中有我们所需要的一个pl脚本,现在我们来开始进行查询取得pl脚本中的内容。Subfindfileway()dim fso,folder,fds,fd '设置变量Dim beginfile '设置最外层文件夹路径Dim folderway'当前路径Dim filename '设置文件...

如何用VBA遍历指定目录下的所有子文件夹Excel文件的所有工作表
sub test()dim f as string,mPath as string,Wb as workbook,Sh as workSheetif workbooks.count>1 then msgbox "关闭其他工作簿!":exit submPath = "D:\\临时文件夹\\" '指定路径,注意分层标记\\f=dir(mPath & "*.xls*")do while f<>"" if f<>thisworkbook.name then set Wb=wo...

vba如何判断指定路径的文件夹?
首先将前面的遍历当前文件路径下的文件写成一个函数。接下来是遍历当前路径下所有文件夹,同样将其写成一个函数。只要把上面两个函数进行拼接,那么就可以实现遍历子文件夹中的所有文件以及当前文件夹中的所有文件。但如果子文件夹不止一层,而是很多层,一层套一层该怎么办。这时候就要通过函数嵌套。首先...

求助]如何用VBA遍历指定目录下的所有子文件夹和文件-字典模式
F是一个临时逻辑变量,保存本程序工作簿中是否已有名为“XLS文件清单”的工作表,方便后续的代码处理,如果没有,就先建这个工作表,后面才能放置遍历出来的文件夹。经过对代码的分析,以下两行完全可以省略 Else F = False

如何用vba遍历文件夹里面的子文件并且复制指定数据形成一张新的表格...
Dim MyFile As String Dim s As String Dim count As Integer MyFile = Dir(文件夹目录 & "*.xlsx")'读入文件夹中的第一个.xlsx文件 count = count + 1 '记录文件的个数 s = s & count & "、" & MyFile Do While MyFile <> ""MyFile = Dir '第二次读入的时候不用写参...

相似回答
大家正在搜