如何筛选FSO.GetFolder中的文件?仅获取指定类型或前缀的最新文件
修改VBA宏实现指定条件的最新文件搜索与打开
你可以通过在文件遍历循环中添加筛选条件,实现仅搜索指定类型或指定前缀的文件,以下是两种需求的具体实现:
1. 仅筛选.xlsm格式文件
在遍历文件夹内文件时,增加对文件扩展名的判断,只处理.xlsm类型的文件:
Sub OpenNewestXLSM() Dim FSO As Object Dim fol As Object Dim fil As Object Dim newest As Date Dim newestFile As String Set FSO = CreateObject("Scripting.FileSystemObject") ' 修正路径格式:原路径缺少反斜杠,应为"C:\TestFolder" Set fol = FSO.GetFolder("C:\TestFolder") newest = #12:00:00 AM# newestFile = "" For Each fil In fol.Files ' 统一转为小写判断,兼容.XLSM大写扩展名的情况 If LCase(FSO.GetExtensionName(fil.Path)) = "xlsm" Then If fil.DateLastModified > newest Then newest = fil.DateLastModified newestFile = fil.Path End If End If Next fil ' 增加无符合条件文件的判断,避免报错 If newestFile <> "" Then MsgBox "最新的.xlsm文件: " & newestFile & " (" & newest & ")" Workbooks.Open newestFile Else MsgBox "未找到任何.xlsm格式文件" End If ' 释放对象,避免内存泄漏 Set fil = Nothing Set fol = Nothing Set FSO = Nothing End Sub
2. 仅筛选文件名以"TestFile"开头的文件
使用Like运算符判断文件名前缀,只处理符合命名规则的文件:
Sub OpenNewestTestFile() Dim FSO As Object Dim fol As Object Dim fil As Object Dim newest As Date Dim newestFile As String Set FSO = CreateObject("Scripting.FileSystemObject") Set fol = FSO.GetFolder("C:\TestFolder") newest = #12:00:00 AM# newestFile = "" For Each fil In fol.Files ' 判断文件名是否以TestFile开头 If fil.Name Like "TestFile*" Then If fil.DateLastModified > newest Then newest = fil.DateLastModified newestFile = fil.Path End If End If Next fil If newestFile <> "" Then MsgBox "最新的TestFile前缀文件: " & newestFile & " (" & newest & ")" Workbooks.Open newestFile Else MsgBox "未找到任何以TestFile开头的文件" End If Set fil = Nothing Set fol = Nothing Set FSO = Nothing End Sub
3. 同时满足两个条件(可选)
如果需要同时筛选.xlsm格式且文件名以TestFile开头的文件,只需将两个条件合并:
If LCase(FSO.GetExtensionName(fil.Path)) = "xlsm" And fil.Name Like "TestFile*" Then
关键修改说明
- 修正了原代码中路径的错误:
C:TestFolder应改为C:\TestFolder,否则会指向当前盘符的相对路径 - 添加了无符合条件文件的判断逻辑,避免因找不到文件导致后续代码报错
- 使用
LCase统一扩展名的大小写,确保.XLSM格式的文件也能被识别 - 增加了对象释放的代码,避免内存泄漏
内容的提问来源于stack exchange,提问作者Jacob Sorini
相关产品推荐
相关产品推荐

