如何用VBA比较两个目录并找出更新目录中的新增文件
VBA实现两个目录新增文件对比
以下是直接可用的VBA代码,能帮你找出Latest目录里比Last目录多出来的新增文件:
Sub FindNewFiles() Dim fso As Object Dim latestFolder As Object, lastFolder As Object Dim latestFile As Object, lastFile As Object Dim fileDict As Object Dim newFiles As String ' 定义两个目录路径,注意路径分隔符是\ Const File_updated As String = "C:\Users\Desktop\Latest" Const File_Last As String = "C:\Users\Desktop\Last" ' 创建FileSystemObject和字典对象(Late Binding,无需额外引用) Set fso = CreateObject("Scripting.FileSystemObject") Set fileDict = CreateObject("Scripting.Dictionary") ' 先检查目录是否存在 If Not fso.FolderExists(File_updated) Or Not fso.FolderExists(File_Last) Then MsgBox "指定的目录不存在,请检查路径!", vbExclamation Exit Sub End If ' 把Last目录的所有文件名存入字典(统一转大写,避免大小写误判) Set lastFolder = fso.GetFolder(File_Last) For Each lastFile In lastFolder.Files fileDict.Add UCase(lastFile.Name), "" Next lastFile ' 遍历Latest目录,筛选出不在字典里的文件 Set latestFolder = fso.GetFolder(File_updated) For Each latestFile In latestFolder.Files If Not fileDict.Exists(UCase(latestFile.Name)) Then newFiles = newFiles & latestFile.Name & vbCrLf End If Next latestFile ' 输出结果 If newFiles <> "" Then MsgBox "Latest目录中的新增文件:" & vbCrLf & vbCrLf & newFiles, vbInformation ' 可选:把结果写入Excel工作表 ' Sheets("Sheet1").Range("A1").Value = "新增文件列表" ' Sheets("Sheet1").Range("A2").Resize(UBound(Split(newFiles, vbCrLf))).Value = Application.Transpose(Split(newFiles, vbCrLf)) Else MsgBox "Latest目录没有新增文件!", vbInformation End If ' 释放对象 Set fso = Nothing Set latestFolder = Nothing Set lastFolder = Nothing Set fileDict = Nothing End Sub
关键说明:
- 路径修正:注意原路径写法
C\Users是错误的,正确格式是C:\Users,代码里已经修正,你只需要改成自己实际的目录路径。 - 高效查找:用字典存储旧目录文件名,
Exists方法的查找效率远高于循环比对,适合文件数量较多的场景(比如你提到的325个文件)。 - 大小写兼容:统一转成大写对比,避免因文件名大小写差异导致的误判。
- 结果输出:默认用消息框展示新增文件列表,注释里提供了写入Excel工作表的方式,按需切换即可。
使用步骤:
- 打开Excel,按
Alt+F11打开VBA编辑器。 - 右键点击工程窗口中的工作簿名称 → 插入 → 模块。
- 粘贴上述代码,修改
File_updated和File_Last的路径。 - 按F5运行宏,或回到Excel界面通过「开发工具」→「宏」执行。
内容的提问来源于stack exchange,提问作者Sparrow
相关产品推荐
相关产品推荐

