34

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

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

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

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

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

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ...

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

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

3 回答 3

88

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

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\tempo.pdf", Quality:= xlQualityStandard, IncludeDocProperties:=True, _
     IgnorePrintAreas:=False, OpenAfterPublish:=True
于 2013-01-18T21:32:15.253 回答
10

与蒂姆的回答类似——但检查了 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") <> "")
结束功能
于 2013-01-20T22:26:41.030 回答
6

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

ThisWorkbook.Sheets("Sheet1").Select

(例如Sheet1,您希望之后激活的单张工作表)

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

于 2014-09-12T19:49:35.183 回答