Sub 提取包含子文件夹()
With Application.FileDialog(msoFileDialogFolderPicker) '获取用户选择文件夹的路径
.Title = "请选择文件夹"
.InitialFileName = ThisWorkbook.Path & "\" '默认打开当前目录"
If .Show = 0 Then MsgBox "本次提取已被取消!!": Exit Sub '如果没有选择保存路径,则退出程序
myPath$ = .SelectedItems(1) '选择的文件路径赋值给变量P
End With
If Right(myPath, 1) <> "" Then myPath = myPath & ""
[a:b].ClearContents '清空汇总表的A-B列原有数据
[a1] = "序号" '汇总表的a1写入。。。。
[b1] = " 文件名如下:" '汇总表的b1写入。。。。
Call ListAllFso(myPath) '调用FSO遍历子文件夹的递归过程
End Sub
Function ListAllFso(myPath$) '用FSO方法遍历并列出所有文件和文件夹名的【递归过程】
Set fld = CreateObject("Scripting.FileSystemObject").GetFolder(myPath)
'用FSO方法得到当前路径的文件夹对象实例 注意这里的【当前路径myPath是个递归变量】
For Each f In fld.Files '遍历当前文件夹内所有【文件.Files】
If InStr(f.Name, ThisWorkbook.Name) Then GoTo 10 '要提取的文件名不能是本文件
[B65536].End(3).Offset(1) = fld & "\" & f.Name '在b列逐个列出文件名
[B65536].End(3).Offset(, -1) = [A65536].End(3).Row '在a列填写序号
10 Next
For Each fd In fld.SubFolders '遍历当前文件夹内所有【子文件夹.SubFolders】
Call ListAllFso(fd.Path) '注意此时的路径变量已经改变为【子文件夹的路径fd.Path】
'注意重点在这里: 继续向下调用递归过程【遍历子文件夹内所有文件文件夹对象】
Next
ActiveSheet.Range("a1:a1000").HorizontalAlignment = xlCenter 'a列数据=水平居中
End Function