【问题标题】:Printing multiple ranges and worksheets to one PDF file将多个范围和工作表打印到一个 PDF 文件
【发布时间】:2012-07-16 15:06:20
【问题描述】:

我有一个工作表,通常需要按工作表和范围的特定顺序打印。我想做的是

  1. 打印出特定的工作表和范围以生成单个 PDF 文件。
  2. 将 PDF 文件作为特定日期保存到特定文件夹。

我遇到的障碍是将大量工作表和范围打印到一个 PDF 文件中,因为目前每个工作表或范围都打印到自己的单个 PDF 文件中。

我假设有一种方法可以将所有必要的工作表和范围放入数组之类的东西中,然后对该变量执行 .PrintOut,但是我还没有让它工作。

我使用的是 Excel 2010,所以我只使用“Adobe PDF”打印机。

如何将多个范围和工作表打印到一个 .pdf 文件中?

【问题讨论】:

  • 好点,我使用的是 Excel 2010,它已经安装了 Adob​​e PDF 打印机。

标签: excel vba excel-2010


【解决方案1】:

要打印多个工作表,您可以将工作表名称放在这样的数组中

Sub PrintArrayOfWorksheets()

    Dim vaWorksheets As Variant

    vaWorksheets = Array("Sheet1", "Sheet2", "Sheet3")

    ThisWorkbook.Worksheets(vaWorksheets).PrintOut

End Sub

打印到 PDF 有特殊问题。如果您使用“官方”插件来创建 PDF,它可能会像上面那样工作(抱歉,我现在不能尝试)。过去,当我使用其他打印为 PDF 的打印机驱动程序时,我发现所有(或至少大部分)PageSetup 属性在工作表上必须相同,否则它将在多个作业中打印。这意味着没有收缩以适应,所有边距都必须相同。我不记得所有引起问题的属性,只是那两个肯定有,而方向肯定没有。

要限制打印范围,您需要在每张纸上设置打印区域。您可以使用 PageSetup.PrintArea 属性在代码中执行此操作。但如果不改变,可能还不如手动做一次,它会一直存在。

【讨论】:

  • 感谢您的回答,这是向前迈出的一大步,由于某种原因,我遇到的一个问题是第一个工作表打印为单个 pdf,然后其他 2 个工作表打印为单独的 pdf。它可能与相同的页面设置属性有关。这也不能解决我包含某些用户定义范围的问题。
【解决方案2】:

见下面的代码。这用于使用 VBA 按钮以自定义顺序打印多张纸。它打印到单击按钮之前选择的任何打印机。

本质上,它所做的是选择您想要的工作表并在工作簿的末尾重新排列它们,然后打印它们。打印后将它们重新排序为原始顺序。

Option Explicit
Private Sub Print_Sheets_InOrder_Click()
    Dim ary
    Dim orig() As String
    Dim a As Variant, fp As String, i As Variant
    ary = Array("Sheet1", "Sheet4", "Sheet3")
    fp = ActiveWorkbook.Path
    ReDim orig(1 To Sheets.Count)
    For i = 1 To Sheets.Count
        orig(i) = Sheets(i).Name
    Next i
    For Each a In ary
        Sheets(a).Move after:=Sheets(Sheets.Count)
    Next a
    ThisWorkbook.Worksheets(ary).PrintOut
    For Each a In orig
        Sheets(a).Move after:=Sheets(Sheets.Count)
    Next a
End Sub

【讨论】:

    【解决方案3】:

    Excel 2010 具有打印到 pdf 的功能。如果您的每个工作表都设置为打印您想要的信息,然后突出显示要打印到一个 pdf 文件的各种工作表,然后转到“文件”和“另存为”并选择另存为类型“pdf” .它应该打印您突出显示的工作表,因为您为每个工作表设置了打印。

    【讨论】:

      【解决方案4】:

      这是我尝试过的一种方法...我将工作表打印到 PS 文件,然后双击 PS 文件以生成 PDF。我知道这是一种解决方法,但打印到 PS 速度很快。它要求您在 PC 上安装 Adob​​e Acrobat。

      Dim GetPath, SavePath, ReportSuffix
      GetPath = ActiveWorkbook.Path & "\"
      ReportSuffix = Range("ReportName").Text & ".ps"
      SavePath = GetPath & ReportSuffix
      
      Dim PrintSheets
      
      PrintSheets = Array("Exec1", "Intro1", "Intro2", "Intro3", "Intro4", "Intro5")
      
      Sheets(PrintSheets).PrintOut Copies:=1, PrintTofile:=True, PrToFileName:=SavePath
      

      【讨论】:

        猜你喜欢
        • 2018-06-25
        • 2014-04-08
        • 2020-06-11
        • 1970-01-01
        • 2018-11-15
        • 1970-01-01
        • 1970-01-01
        • 2021-08-20
        • 2013-05-25
        相关资源
        最近更新 更多