VBA查找指定日期范围每日最新xlsx文件并批量处理的实现方法问询
需求实现方法
不需要把dteFile改为日期范围类型,新增几个控制变量、把原有数据处理逻辑封装为独立子过程即可实现需求。
核心修改思路
- 新增起止日期变量,可自定义需要遍历的时间范围
- 新增工作日判断逻辑,跳过休息日
- 将原有的单文件查找、数据处理逻辑抽离为可复用的子过程,接收日期参数后返回对应日期的最新文件
- 遍历日期范围内的每一个工作日,逐一调用文件查找+数据处理逻辑
完整可运行代码
首先需要在VBA编辑器的「工具-引用」中勾选「Microsoft Scripting Runtime」,否则FileSystemObject会报错:
Sub BatchLoadByDateRange() Dim startDate As Date, endDate As Date, curDate As Date ' 此处自定义你需要的起止日期 startDate = DateSerial(2021, 3, 1) endDate = DateSerial(2021, 6, 1) ' 遍历日期范围内的每一天 For curDate = startDate To endDate ' 判断是否为工作日(周一到周五,若需要排除法定节假日可自行补充判断逻辑) If Weekday(curDate, vbMonday) <= 5 Then ' 调用子过程处理当前工作日的最新文件 Call ProcessSingleDayLatestFile(curDate) End If Next curDate End Sub ' 处理指定日期的最新xlsx文件 Sub ProcessSingleDayLatestFile(targetDate As Date) Dim FileSys As FileSystemObject Dim objFile As File Dim myFolder As Folder Dim strFilename As String Dim dteFile As Date Const myDir As String = "C:\myfolder" ' 替换为你的文件夹路径 Set FileSys = New FileSystemObject Set myFolder = FileSys.GetFolder(myDir) dteFile = DateSerial(1900, 1, 1) ' 遍历所有文件,找目标日期修改的最新xlsx文件 For Each objFile In myFolder.Files ' 只判断xlsx格式、且修改日期为目标日期的文件 If LCase(FileSys.GetExtensionName(objFile.Path)) = "xlsx" And _ DateValue(objFile.DateLastModified) = targetDate Then If objFile.DateLastModified > dteFile Then dteFile = objFile.DateLastModified strFilename = objFile.Name End If End If Next objFile ' 找到文件后执行原有处理逻辑 If strFilename <> "" Then Dim wb As Workbook Set wb = Workbooks.Open(myDir & "\" & strFilename, ReadOnly:=True) wb.Activate ' ---------------此处粘贴你已经写好的数据处理代码--------------- ' 例如筛选、复制粘贴到其他工作簿的逻辑 ' ----------------------------------------------------------- wb.Close SaveChanges:=False ' 处理完成后关闭文件,不需要保存就写False End If End Sub
补充说明
- 如果需要排除法定节假日,可预先维护一个节假日数组,在工作日判断处补充逻辑,遍历到对应日期直接跳过即可
- 如果文件夹内文件数量极多,可以提前把所有文件的修改日期和路径存入字典,再按日期匹配,避免重复遍历文件夹提升运行效率
- 原有单文件查找的
LatestLoad过程可以直接删除,所有逻辑已经整合到上述代码中
内容的提问来源于stack exchange,提问作者st87_top
相关产品推荐
相关产品推荐

