如何用VBA遍历目录所有文件夹筛选指定Word文档并转换为PDF
调整后的VBA实现方案
要实现遍历所有子文件夹+指定Word文件筛选转换,核心是新增递归遍历文件夹的逻辑,同时预留筛选规则配置位,完整代码如下:
Sub BatchConvertAllWordToPDF() Dim fso As Object Dim rootFolder As Object Dim strRootFolder As String, strFileFilter As String ' -------------------------- 基础配置项,可直接修改以下参数 -------------------------- strRootFolder = "C:\Users\Test\Desktop\Test Files\" ' 要处理的根目录 strFileFilter = "*.docx" ' 文件筛选规则,示例:"*结算*.docx"=文件名含结算的docx,"*.doc?"=所有doc/docx文件 ' ------------------------------------------------------------------------------------- ' 创建文件系统对象 Set fso = CreateObject("Scripting.FileSystemObject") Set rootFolder = fso.GetFolder(strRootFolder) ' 调用递归处理子程序,处理根目录和所有子文件夹 ProcessFolder rootFolder, strFileFilter ' 释放对象 Set rootFolder = Nothing Set fso = Nothing MsgBox "全部转换完成!", vbInformation End Sub ' 递归处理文件夹的子程序 Sub ProcessFolder(folder As Object, filter As String) Dim subFolder As Object Dim file As Object Dim objDoc As Document ' 先处理当前文件夹下的所有匹配文件 For Each file In folder.Files If file.Name Like filter Then On Error Resume Next ' 跳过打开失败的文件(如加密、正在使用的文件) Set objDoc = Documents.Open(FileName:=file.Path) If Err.Number = 0 Then ' 导出为PDF,和原文件同目录同名 objDoc.ExportAsFixedFormat _ OutputFileName:=Left(file.Path, InStrRev(file.Path, ".")) & "pdf", _ ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, OptimizeFor:=wdExportOptimizeForPrint, _ Range:=wdExportAllDocument, Item:=wdExportDocumentContent objDoc.Close SaveChanges:=wdDoNotSaveChanges End If On Error GoTo 0 End If Next file ' 递归处理所有子文件夹 For Each subFolder In folder.SubFolders ProcessFolder subFolder, filter Next subFolder End Sub
使用说明
- 筛选规则配置:
strFileFilter支持通配符匹配,*代表任意长度任意字符,?代表单个任意字符,可灵活配置筛选条件:- 仅转换docx文件:填
"*.docx" - 转换所有Word文件(含doc/docx/docm):填
"*.doc?" - 仅转换文件名含"季度报告"的docx:填
"*季度报告*.docx" - 仅转换2024年开头的Word文件:填
"2024*.doc?"
- 仅转换docx文件:填
- 转换后的PDF默认和原Word文件存放在同一目录,文件名保持和原Word一致,仅修改后缀为.pdf
- 代码自动跳过加密、正在被占用的Word文件,不会中断转换流程
内容的提问来源于stack exchange,提问作者user13350731
相关产品推荐
相关产品推荐

