【问题标题】:Save multiple sheets to .pdf将多张工作表保存为 .pdf
【发布时间】:2013-01-02 12:02:03
【问题描述】:

我有一个报告电子表格,它从数据库中获取一些数据并形成三张汇总报告信息。我想从命令行自动运行电子表格,并让它自动将所有三个报告表保存为 PDF 文件。

起初我以为我可以通过一系列“打印为 PDF”在工作表上使用 VBA 宏来执行此操作,但这需要一个中间交互式对话框来指定输出文件名。然后我发现我可以只保存为pdf,并且宏可以设置输出文件名。 但是,这会创建三个单独的文件,然后我必须稍后在外部将它们放在一起以合并它们。

(奇怪的是,另存为 pdf 只保存一张工作表,而其他保存模式似乎可以保存整个工作簿。)

是的,以后有合并这三个文件的工具,但我想知道是否有一些简单的方法可以让 Excel 将多张工作表一起保存为一个 pdf 文件。

我现在打印一系列的东西,比如:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ...

我可以做一个类似(伪代码)的语句吗:

ThisWorkbook.Sheets(1,2,3,4).ExportAsFixedFormat Type:=xlTypePDF, ...

【问题讨论】:

    标签: excel vba pdf pdf-generation export-to-pdf


    【解决方案1】:

    首先选择要合并的工作表:

    ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select
    
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "C:\tempo.pdf", Quality:= xlQualityStandard, IncludeDocProperties:=True, _
         IgnorePrintAreas:=False, OpenAfterPublish:=True
    

    【讨论】:

    • @Tim +1 这是一篇有用的文章 :)
    • 选择一组工作表的能力非常出色。谢谢。
    • 如果使用book.Windows(1).Visible = False 隐藏工作簿Sheets(..).Select() 失败。 (python3.4, mso2013)
    • 如果您担心用户重命名工作表,您可以使用工作表的 Name 方法,例如Thisworkbook.Sheets(Array(Sheet1.Name, Sheet2.Name)).Select,这样无论用户如何将工作表重命名为宏仍然可以正常工作.要打破这一点,您必须在 VBA 中编辑工作表属性。
    • 我发现该函数只是尝试(并且失败)导出整个工作簿(根据临时文件的文件大小猜测),而与工作表选择无关。可能是新版 Excel/VBA?
    【解决方案2】:

    与 Tim 的回答类似 - 但检查了 2007 年(默认情况下未安装 PDF 导出):

    公共子 subCreatePDF() If Not is PDFLibraryInstalled Then '最好将其显示为带有正确链接的用户表单: MsgBox "请安装插件以导出为 PDF。您可以在 http://www.microsoft.com/downloads/details.aspx?familyid=4d951911-3e7e-4ae6-b059-a2e79ed87041 找到它"。 退出子 万一 ActiveSheet.ExportAsFixedFormat 类型:=xlTypePDF,_ 文件名:=ActiveWorkbook.Path & Application.PathSeparator & _ ActiveSheet.Name & " für " & Range("SelectedName").Value & ".pdf", _ 质量:=xlQualityStandard,IncludeDocProperties:=True,_ IgnorePrintAreas:=False, OpenAfterPublish:=True 结束子 私有函数 IsPDFLibraryInstalled() 作为布尔值 '归功于 Ron DeBruin (http://www.rondebruin.nl/pdf.htm) IsPDFLibraryInstalled = _ (Dir(Environ("commonprogramfiles") & _ "\Microsoft 共享\OFFICE" & _ 格式(Val(Application.Version),“00”)&_ "\EXP_PDF.DLL") "") 结束功能

    【讨论】:

    • 这也适用于 Excel 2003 吗?我的意思是,IsPDFLibraryInstalled 会返回 false 吗?
    • IsPDFLibraryInstalled() 的代码中有一个错误。在最后的"") 之前应该有一个 符号,即End Function 之前的行应该是"\EXP_PDF.DLL") <> "")
    • 我试图编辑代码以修复 错误以及“End If”中缺少的“If”,但我的编辑被拒绝了。
    • @AnotherParker 感谢您指出这一点。它实际上在源代码中,但在转换为 HTML 时丢失了。现已修复 - 谢谢
    【解决方案3】:

    我建议在导出到 PDF 之后添加以下行:

    ThisWorkbook.Sheets("Sheet1").Select
    

    (例如,Sheet1 是您之后想要激活的单张工作表)

    让多个工作表处于选定状态可能会导致执行某些代码时出现问题。 (例如,当主动选择多个工作表时,unprotect 无法正常工作。)

    【讨论】:

      猜你喜欢
      • 2016-09-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-19
      • 2016-08-04
      • 1970-01-01
      相关资源
      最近更新 更多