ARTICLE · 1327437
Excel VBA编程-一键把整本工作簿导出成一个 PDF(所有表合一)
Excel VBA编程-一键把整本工作簿导出成一个 PDF(所有表合一)

一个常被忽略的小麻烦
很多同事手里的报表,一张工作簿里塞了五六张表:销售表、库存表、利润表、明细表……月底要把它们发给领导一份 PDF,却只能一张张导出再手动拼,费时间还容易漏掉某张表。
其实只要掌握一个核心命令,就能把整本工作簿一次导出成一个 PDF,所有表按顺序排好、一个文件搞定。今天我们就学这个最实用的"整本合一"导出法。
今天的知识点
先说一个关键事实:在 Excel 里手动或用普通方法导出 PDF,默认只导出"当前这一张表"(微软官方也确认了这个默认行为,是为了防止隐藏表被意外泄露)。
想要"整本工作簿合成一个 PDF",秘诀是:用工作簿对象的 ExportAsFixedFormat 方法,而不是单张表的。
核心写法只有一行:
ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:="路径\文件名.pdf", Quality:=xlQualityStandard, OpenAfterPublish:=False对工作簿对象(ActiveWorkbook)执行导出,它里面的所有表就会自动按顺序合并成一份 PDF。
【SVG 示意图】
案例一(简单):一键把整个工作簿导出成一个 PDF
功能说明 固定文件名"整本报表.pdf",保存到当前 Excel 文件所在的文件夹。适合每天固定出同一份报告的场景,点一下就出 PDF。
代码(可直接复制运行)
Sub 一键导出整本为一个PDF() ' 先确认文件已保存,否则拿不到保存路径 If ActiveWorkbook.Path = "" Then MsgBox "请先按 Ctrl+S 保存文件,再运行本宏。", vbExclamation Exit Sub End If ' 整本工作簿(所有表)导出成一个 PDF,存到当前文件夹 ActiveWorkbook.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=ActiveWorkbook.Path & "\整本报表.pdf", _ Quality:=xlQualityStandard, _ IncludeDocProperties:=True, _ IgnorePrintAreas:=False, _ OpenAfterPublish:=False MsgBox "已把整本工作簿导出成:整本报表.pdf", vbInformationEnd Sub操作步骤
按 Alt+F11 打开 VBA 编辑器,点"插入 → 模块",把上面代码粘贴进去。 回到 Excel,先按 Ctrl+S 把文件保存一下(记得存成 .xlsm 格式)。 按 Alt+F8,选"一键导出整本为一个PDF",点"运行"。 打开文件所在的文件夹,就能看到生成的"整本报表.pdf",里面按顺序包含所有表。
案例二(中等):自选文件名导出整本为一个 PDF
功能说明 用 InputBox 弹窗让你自己输入文件名,灵活一点,适合不同报告用不同名字,比如"11月财务报表""季度汇总"等。
代码(可直接复制运行)
Sub 导出整本PDF_自选文件名() Dim 文件名 As String ' 弹窗让用户输入文件名(不用写 .pdf 后缀) 文件名 = InputBox("请输入 PDF 文件名:", "导出整本为PDF") If 文件名 = "" Then Exit Sub ' 点了取消就直接退出 If ActiveWorkbook.Path = "" Then MsgBox "请先按 Ctrl+S 保存文件,再运行本宏。", vbExclamation Exit Sub End If ' 拼出完整路径后导出 文件名 = ActiveWorkbook.Path & "\" & 文件名 & ".pdf" ActiveWorkbook.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=文件名, _ Quality:=xlQualityStandard, _ OpenAfterPublish:=False MsgBox "已导出:" & 文件名, vbInformationEnd Sub操作步骤
同上把代码粘进模块。 运行后弹窗里输入想要的名字,比如"11月财务报表"。 点确定,PDF 就会以"11月财务报表.pdf"出现在当前文件夹。
案例三(实用小案例):自动带日期存到桌面
功能说明 很多报表要按天归档。这个案例自动在文件名里加上当天日期,并直接存到电脑桌面,方便你每天一键归档、不会和昨天的文件重名。
代码(可直接复制运行)
Sub 导出整本PDF_带日期存桌面() Dim 桌面路径 As String Dim 文件名 As String ' 拿到当前电脑的桌面路径 桌面路径 = CreateObject("WScript.Shell").SpecialFolders("Desktop") ' 文件名自动带上今天日期,例如 整本报表_2026-11-04.pdf 文件名 = 桌面路径 & "\整本报表_" & Format(Date, "yyyy-mm-dd") & ".pdf" ActiveWorkbook.ExportAsFixedFormat _ Type:=xlTypePDF, _ Filename:=文件名, _ Quality:=xlQualityStandard, _ OpenAfterPublish:=False MsgBox "已导出整本报表到桌面:" & vbCrLf & 文件名, vbInformationEnd Sub操作步骤
把代码粘进模块。 保存文件为 .xlsm 后运行本宏。 桌面上会出现"整本报表_当天日期.pdf",每天自动换日期,不会覆盖昨天的归档。
知识点小结
普通的"导出 PDF"默认只导"当前这一张表";要整本合一,必须用工作簿对象的 ActiveWorkbook.ExportAsFixedFormat。Type:=xlTypePDF表示导出 PDF;Quality:=xlQualityStandard是高清清晰度;OpenAfterPublish:=False表示不自动打开文件。文件名要带上完整路径,否则会存到意想不到的地方。用 ActiveWorkbook.Path取当前文件夹,或用SpecialFolders("Desktop")取桌面。运行前务必先按 Ctrl+S 保存工作簿,否则拿不到路径;文件要存成 .xlsm 才能保留宏。
往期精选
Excel VBA编程-一键用 VBA 把表格导出成 PDF Excel VBA编程-一键批量保护所有工作表(统一加密码) Excel VBA编程-一键批量冻结所有工作表的首行 Excel VBA编程-一键冻结首行 Excel VBA编程-一键删除表格里的空行和空列
其他信息
作者:西哥的AI幻觉 本套教程面向零基础办公人员,每篇只讲一个知识点,代码均可直接复制运行。 重要提醒:包含宏的文件请保存为"Excel 启用宏的工作簿(.xlsm)",.xlsx 格式会丢失代码。 下一篇预告:Excel VBA编程-一键给单元格批量添加批注(加评论说明)















































































