VBA代码问题:修改系统日期后无法删除前日版本文件
解决修改系统日期后自动删除前日Unsuppression文件的问题
原代码仅针对当日生成的Unsuppression_dd.MM_XX.txt文件做版本迭代和旧文件清理,当修改系统日期后,前日的同前缀文件会被遗留。要实现修改日期后自动删除前日相关文件,需要在每次运行代码时,先清理目标文件夹内所有非当日日期的Unsuppression_*.txt文件,以下是修改后的完整代码:
Sub StackOverfolow_UpdatetextfilewithVersion() ' 定义基础文件夹路径 Dim baseFolder As String baseFolder = "C:\Users\kbkmth\Desktop\SIM_macro\New exp\" ' 定义当日日期格式字符串(用于匹配当日文件) Dim todayDateStr As String todayDateStr = Format(Date, "dd.MM") ' --- 新增:删除所有非当日的Unsuppression文件 --- Dim oldFile As String ' 匹配所有Unsuppression开头的txt文件 oldFile = Dir(baseFolder & "Unsuppression_*.txt") Do While oldFile <> "" ' 提取文件名中的日期部分(Unsuppression_后第1位到第5位为dd.MM) Dim fileDateStr As String fileDateStr = Mid(oldFile, 15, 5) ' 如果文件日期与当日不符,执行删除 If fileDateStr <> todayDateStr Then Application.Wait Now + TimeValue("00:00:00.5") ' 短延迟避免文件占用 Kill baseFolder & oldFile End If ' 遍历下一个文件 oldFile = Dir Loop ' 定义当日文件的基础路径 Dim folderPath As String folderPath = baseFolder & "Unsuppression_" & todayDateStr & "_" ' 定义要复制的单元格区域 Dim copyRange As Range Set copyRange = ThisWorkbook.Sheets("Sheet1").Range("H2:H8") ' 将区域值存入数组 Dim valuesArray As Variant valuesArray = copyRange.Value Dim versionNumber As Integer, aTxt Dim fName As String versionNumber = 1 ' 检查当日是否已有版本文件,清理并递增版本号 fName = Dir(folderPath & "*.txt") If Len(fName) > 0 Then Application.Wait Now + TimeValue("00:00:01") ' 1秒延迟避免文件占用 Kill baseFolder & fName aTxt = Split(fName, "_") ' 提取版本号并递增 versionNumber = CInt(Left(aTxt(UBound(aTxt)), 2)) + 1 End If ' 创建并写入新的版本文件 Dim fileNumber As Integer fileNumber = FreeFile Open folderPath & Format(versionNumber, "00") & ".txt" For Output As fileNumber For i = 1 To UBound(valuesArray, 1) Print #fileNumber, valuesArray(i, 1) Next i Close fileNumber End Sub
关键改动说明
- 新增非当日文件清理逻辑:通过
Dir遍历所有同前缀文件,提取文件名中的日期段与当日日期对比,不匹配则直接删除,确保仅保留当日的文件。 - 统一路径定义:将基础文件夹路径提前定义,避免重复写路径导致的错误。
- 优化延迟设置:删除非当日文件时用0.5秒短延迟,在避免文件占用问题的同时提升运行效率。
内容的提问来源于stack exchange,提问作者Kuldeep
相关产品推荐
相关产品推荐

