请求修改VBA程序:按修改日期排序文件后输出至Excel
按修改日期排序后输出文件名的VBA代码
没问题,我来帮你调整这段VBA代码,实现按文件修改日期(和资源管理器排序逻辑一致)排序后,再把文件名输出到Excel工作表里。
修改后的完整代码
Sub HGDW_PrintFiles_Sorted() Dim objFSO As Object Dim objFolder As Object Dim objFile As Object Dim i As Integer, j As Integer Dim fileData() As Variant ' 用于存储文件名和修改日期的数组 Dim tempData As Variant ' 创建FileSystemObject对象 Set objFSO = CreateObject("Scripting.FileSystemObject") ' 获取目标文件夹对象 Set objFolder = objFSO.Getfolder("C:\Users\bf91955\Desktop\Test\") ' 根据文件数量初始化数组 ReDim fileData(1 To objFolder.Files.Count, 1 To 2) i = 1 ' 遍历文件夹,将文件名和修改日期存入数组 For Each objFile In objFolder.Files fileData(i, 1) = objFile.Name ' 第一列存文件名 fileData(i, 2) = objFile.DateLastModified ' 第二列存修改日期 i = i + 1 Next objFile ' 冒泡排序:按修改日期升序排列(如果要降序,把>改成<即可) For i = LBound(fileData, 1) To UBound(fileData, 1) - 1 For j = i + 1 To UBound(fileData, 1) If fileData(i, 2) > fileData(j, 2) Then tempData = fileData(i, :) fileData(i, :) = fileData(j, :) fileData(j, :) = tempData End If Next j Next i ' 将排序后的文件名输出到工作表 i = 1 For Each tempData In fileData Cells(i, 1) = tempData(1) i = i + 1 Next tempData ' 释放对象 Set objFile = Nothing Set objFolder = Nothing Set objFSO = Nothing End Sub
关键改动说明
- 新增了
fileData数组,用来同时存储每个文件的文件名和修改日期,这样排序时能保证名称和日期的关联关系不混乱。 - 加入了冒泡排序逻辑:默认是按修改日期升序排列(最早修改的文件在前),如果想要和资源管理器里“修改日期降序”(最新修改的在前)一致,只需要把排序判断里的
>改成<就行。 - 最后遍历排序后的数组,把文件名输出到A列,保证顺序是按修改日期排好的。
小提示
如果你的文件夹里文件数量特别多(比如上千个),冒泡排序效率会稍低,这时候可以换成更高效的排序算法(比如快速排序),但日常使用冒泡排序完全足够啦。
内容的提问来源于stack exchange,提问作者Rhyfelwr
相关产品推荐
相关产品推荐

