VBA遍历文件夹所有Excel工作簿 将首工作表批量导出为PDF
批量导出Excel工作簿首个工作表为PDF的VBA方案
针对你的两个需求,直接在原代码基础上调整即可,修改后的完整代码和使用方法如下:
调整点说明
- 移除原代码遍历单工作簿全量表的逻辑,固定取每个工作簿索引为1的工作表(也就是最左侧的第一个表,Excel工作表索引默认从左到右从1开始排序)
- 新增文件夹批量扫描逻辑,自动遍历选中文件夹下所有
.xlsx格式文件 - 加入文件自动打开/关闭逻辑,处理完单个文件后自动关闭不保存,不会残留后台进程
- 增加可视化文件夹选择弹窗,不需要手动硬编码文件路径,新手操作无门槛
- 加了基础的运行优化,处理大文件/多文件时不会卡界面
完整修改后代码
Sub BatchExportFirstSheetToPDF() Dim sPath As String Dim sFileName As String Dim wb As Workbook Dim targetSheet As Worksheet Dim exportPath As String ' 临时关闭屏幕更新、系统弹窗,提升批量处理速度 Application.ScreenUpdating = False Application.DisplayAlerts = False ' 弹出选择框,让你选要处理的Excel文件所在文件夹 With Application.FileDialog(msoFileDialogFolderPicker) .Title = "选择待处理Excel文件存放文件夹" If .Show = -1 Then sPath = .SelectedItems(1) & "\" Else ' 点取消直接退出程序 GoTo CleanExit End If End With ' 开始遍历文件夹内所有xlsx格式文件 sFileName = Dir(sPath & "*.xlsx") Do While sFileName <> "" ' 跳过当前存宏的文件本身,避免误处理 If sFileName <> ThisWorkbook.Name Then ' 只读方式打开待处理工作簿 Set wb = Workbooks.Open(Filename:=sPath & sFileName, ReadOnly:=True) ' 定位最左侧第一个工作表 Set targetSheet = wb.Worksheets(1) ' 生成PDF保存路径,PDF和原Excel文件同名,存在同目录下 exportPath = sPath & Left(sFileName, InStrRev(sFileName, ".") - 1) & ".pdf" ' 执行PDF导出 targetSheet.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=exportPath, _ Quality:=xlQualityStandard, _ IncludeDocProperties:=False, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False ' 关闭处理完的工作簿,不保存任何更改 wb.Close SaveChanges:=False End If ' 匹配下一个xlsx文件 sFileName = Dir Loop CleanExit: ' 恢复Excel默认配置 Application.ScreenUpdating = True Application.DisplayAlerts = True MsgBox "所有文件导出完成!", vbInformation End Sub
使用步骤
- 打开任意一个Excel文件,按快捷键
Alt+F11调出VBA编辑器 - 在左侧工程资源管理器面板右键点击当前工作簿名称,依次选择「插入」-「模块」
- 把上面的代码完整粘贴到弹出的模块代码窗口中
- 按
F5运行宏,在弹出的文件夹选择框里选中你存放所有待处理xlsx文件的文件夹,点击确认即可 - 等待弹出「导出完成」的提示后,去对应文件夹就能看到所有生成的PDF文件
小提示:如果需要处理
.xlsm、.xls等其他格式的Excel文件,只需要把代码里Dir(sPath & "*.xlsx")中的*.xlsx改成*.xls*就能兼容所有Excel格式文件;运行前建议先备份原文件,避免意外情况导致文件损坏。
内容的提问来源于stack exchange,提问作者JamesHasAQuestion
相关产品推荐
相关产品推荐

