You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何筛选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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 09:52:36