如何用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
相关产品推荐
相关产品推荐

