夜雨聆风学习资料网

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

操作步骤

  1. 按 Alt+F11 打开 VBA 编辑器,点"插入 → 模块",把上面代码粘贴进去。
  2. 回到 Excel,先按 Ctrl+S 把文件保存一下(记得存成 .xlsm 格式)。
  3. 按 Alt+F8,选"一键导出整本为一个PDF",点"运行"。
  4. 打开文件所在的文件夹,就能看到生成的"整本报表.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

操作步骤

  1. 同上把代码粘进模块。
  2. 运行后弹窗里输入想要的名字,比如"11月财务报表"。
  3. 点确定,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

操作步骤

  1. 把代码粘进模块。
  2. 保存文件为 .xlsm 后运行本宏。
  3. 桌面上会出现"整本报表_当天日期.pdf",每天自动换日期,不会覆盖昨天的归档。

知识点小结

  1. 普通的"导出 PDF"默认只导"当前这一张表";要整本合一,必须用工作簿对象的 ActiveWorkbook.ExportAsFixedFormat。
  2. Type:=xlTypePDF 表示导出 PDF;Quality:=xlQualityStandard 是高清清晰度;OpenAfterPublish:=False 表示不自动打开文件。
  3. 文件名要带上完整路径,否则会存到意想不到的地方。用 ActiveWorkbook.Path 取当前文件夹,或用 SpecialFolders("Desktop") 取桌面。
  4. 运行前务必先按 Ctrl+S 保存工作簿,否则拿不到路径;文件要存成 .xlsm 才能保留宏。

往期精选

  • Excel VBA编程-一键用 VBA 把表格导出成 PDF
  • Excel VBA编程-一键批量保护所有工作表(统一加密码)
  • Excel VBA编程-一键批量冻结所有工作表的首行
  • Excel VBA编程-一键冻结首行
  • Excel VBA编程-一键删除表格里的空行和空列

其他信息

  • 作者:西哥的AI幻觉
  • 本套教程面向零基础办公人员,每篇只讲一个知识点,代码均可直接复制运行。
  • 重要提醒:包含宏的文件请保存为"Excel 启用宏的工作簿(.xlsm)",.xlsx 格式会丢失代码。
  • 下一篇预告:Excel VBA编程-一键给单元格批量添加批注(加评论说明)

回首页,搜索你想要的文档

在首页搜索框输入关键词,快速定位资料

文库首页搜索指引 立即搜索

相关学习资料