将多个工作表保存为.pdf

gut*_*rie 25 pdf excel vba pdf-generation export-to-pdf

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

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

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

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

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

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ...
Run Code Online (Sandbox Code Playgroud)

我可以做一个像(伪代码)的单一语句:

ThisWorkbook.Sheets(1,2,3,4).ExportAsFixedFormat Type:=xlTypePDF, ...
Run Code Online (Sandbox Code Playgroud)

Tim*_*ams 71

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

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

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:\tempo.pdf", Quality:= xlQualityStandard, IncludeDocProperties:=True, _
     IgnorePrintAreas:=False, OpenAfterPublish:=True
Run Code Online (Sandbox Code Playgroud)

  • 如果您担心用户重命名工作表,您可以使用工作表的Name方法,例如`Thisworkbook.Sheets(Array(Sheet1.Name,Sheet2.Name)).选择`以便无论用户重命名宏的工作表仍然可以运行.要打破这种情况,您必须在VBA中编辑工作表属性. (7认同)
  • 如果你用`book.Windows(1).Visible = False`` Sheets(..)隐藏工作簿.Select()`失败.(python3.4,mso2013) (2认同)

Pet*_*ert 8

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

Public Sub subCreatePDF()

    If Not IsPDFLibraryInstalled Then
        'Better show this as a userform with a proper link:
        MsgBox "Please install the Addin to export to PDF. You can find it at http://www.microsoft.com/downloads/details.aspx?familyid=4d951911-3e7e-4ae6-b059-a2e79ed87041". 
        Exit Sub
    End If

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ActiveWorkbook.Path & Application.PathSeparator & _
        ActiveSheet.Name & " für " & Range("SelectedName").Value & ".pdf", _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub

Private Function IsPDFLibraryInstalled() As Boolean
'Credits go to Ron DeBruin (http://www.rondebruin.nl/pdf.htm)
    IsPDFLibraryInstalled = _
        (Dir(Environ("commonprogramfiles") & _
        "\Microsoft Shared\OFFICE" & _
        Format(Val(Application.Version), "00") & _
        "\EXP_PDF.DLL") <> "")
End Function


小智 6

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

ThisWorkbook.Sheets("Sheet1").Select
Run Code Online (Sandbox Code Playgroud)

(例如,这Sheet1是您之后要激活的单张纸)

将多张纸留在选定状态可能会导致执行某些代码时出现问题。(例如,当主动选择多张纸时,取消保护功能无法正常工作。)