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

如何用VBA宏打开指定班次的最新CSV日程文件?

需求背景

我是宏与VBA编写新手,现有一份用于发送每日班组会议笔记的Excel表格,需要添加按钮点击后加载本周班次日程。指定文件夹S:\Systems\Schedules内存放各班次的每周日程CSV文件,文件名格式示例:

1st_Shift_01Jan2023
1st_Shift_08Jan2023
2nd_Shift_01Jan2023
2nd_Shift_09Jan2023

需求:编写宏,点击后打开对应2nd Shift的最新创建文件,将内容复制粘贴到每日笔记中。之前的宏只能打开单个固定工作簿,现在需要适配多文件场景,原宏代码如下:

Sub ScheduleTuesday()

    Dim HuddleNotes As Workbook
    Dim ThisWeekSchedule As Workbook
    
    Set HuddleNotes = ThisWorkbook
    Application.DisplayAlerts = False
    Set ThisWeekSchedule = Workbooks.Open("S:\Systems\Schedules")
    Application.DisplayAlerts = True
    
    ThisWeekSchedule.Activate
        Sheets("Schedule Input").Activate
        Range("A1:E29").Select
            Selection.Copy
            
    HuddleNotes.Activate
        Sheets("Schedule").Activate
            Range("A1:E29").Select
            ActiveSheet.Paste
            
    ThisWeekSchedule.Activate
        Application.DisplayAlerts = False
        ActiveWorkbook.Close
        Application.DisplayAlerts = True

End Sub

不太熟悉Dir函数的用法,需要帮助修改代码。

修改后的VBA宏代码
Sub LoadLatest2ndShiftSchedule()
    Dim HuddleNotes As Workbook
    Dim targetFolder As String
    Dim fileName As String
    Dim latestFile As String
    Dim latestFileDate As Date
    
    ' 设置目标文件夹路径(末尾需加反斜杠)
    targetFolder = "S:\Systems\Schedules\"
    ' 初始化最新文件相关变量
    latestFile = ""
    latestFileDate = DateSerial(1900, 1, 1)
    
    Set HuddleNotes = ThisWorkbook
    ' 关闭屏幕更新和提示,提升运行效率
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
    
    ' 遍历文件夹中所有2nd_Shift开头的CSV文件
    fileName = Dir(targetFolder & "2nd_Shift_*.csv")
    Do While fileName <> ""
        ' 获取文件的最后修改/创建时间
        Dim fileDate As Date
        fileDate = FileDateTime(targetFolder & fileName)
        
        ' 更新最新文件记录
        If fileDate > latestFileDate Then
            latestFileDate = fileDate
            latestFile = fileName
        End If
        
        ' 获取下一个匹配的文件
        fileName = Dir
    Loop
    
    ' 找到最新文件后执行复制操作
    If latestFile <> "" Then
        Dim ThisWeekSchedule As Workbook
        Set ThisWeekSchedule = Workbooks.Open(targetFolder & latestFile)
        
        ' 直接复制指定区域到目标工作表,无需激活/选中
        ThisWeekSchedule.Sheets(1).Range("A1:E29").Copy _
            Destination:=HuddleNotes.Sheets("Schedule").Range("A1")
        
        ' 关闭日程文件,不保存更改
        ThisWeekSchedule.Close SaveChanges:=False
    Else
        ' 未找到文件时弹出提示
        MsgBox "未找到2nd Shift的日程CSV文件!", vbExclamation
    End If
    
    ' 恢复屏幕更新和提示
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub
关键要点说明
  • Dir函数的使用:Dir(targetFolder & "2nd_Shift_*.csv")用于筛选出文件夹中所有以2nd_Shift_开头的CSV文件,后续调用无参数的Dir()会继续返回下一个匹配文件,直到返回空字符串
  • 获取文件时间:FileDateTime函数返回文件的最后修改或创建时间,通过比较这个时间来确定最新的文件
  • 优化复制逻辑:去掉原代码中的Activate和Select操作,直接通过工作表和区域的对象引用完成复制,避免不必要的界面交互,提升代码稳定性
  • 容错处理:添加了未找到匹配文件时的提示框,避免宏无响应或报错
  • 性能优化:开启Application.ScreenUpdating = False可以在运行过程中禁止屏幕刷新,减少闪烁,提升运行速度

内容的提问来源于stack exchange,提问作者Savanna

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 12:02:38