图(1)
上一篇文章跟大家介绍的获取文件路径的方法是不包含子目录的,今天继续跟大家分享用fso对象获取子目录文件路径的方法,代码并不复杂,关键是要懂得设计思路,代码如下:
Public fileList As String, fileCount As Integer
Sub GetTxtFile()
Dim fileStyle As String
Dim filePath As String
fileStyle = "txt" ' 指定文件类型(扩展名)
filePath = "D:\Users\Hero\Desktop\办公室"
Call GetAllFilePath(filePath, fileStyle)
Debug.Print fileList & vbCrLf & "执行完毕!总共有" & fileCount & "个" & fileStyle & "文件"
'清理公共变量,避免影响下次运行
fileList = ""
fileCount = 0
End Sub
Sub GetAllFilePath(filePath As String, fileStyle As String)
'
' 用fso对象获取指定类型文件的路径(含子目录)
'
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
If Not fso.folderExists(filePath) Then
MsgBox "找不到路径:" & vbCrLf & filePath, vbOKOnly + vbExclamation, "错误"
Exit Sub
End If
Dim file As Object
Dim folder As Object
Set folder = fso.GetFolder(filePath)
'遍历主目录的每个文件
For Each file In folder.Files
If LCase(fso.GetExtensionName(file.path)) = fileStyle Then
If Len(fileList) = 0 Then
fileList = file.path
Else
fileList = fileList & vbCrLf & file.path
End If
fileCount = fileCount + 1
End If
Next file
'遍历所有子目录
For Each subfolder In folder.SubFolders
Call GetAllFilePath(subfolder.path, fileStyle) ' 调用程序自身处理子目录
Next subfolder
End Sub
执行结果如下图:
图(2)
使用以上方法你只需要重新定义filePath和fileStyle变量的值即可,另外通过获取CMD命令Dir文件列表也可以实现同样的效果,感兴趣的朋友可以浏览本人分享的另一篇文章《VBA如何获取CMD命令的运行结果》。