将多个范围和工作表打印到一个PDF文件

时间:2012-07-17 16:26:04

标签: excel vba excel-2010

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

  1. 打印出特定的工作表和范围,以便单个PDF文件。
  2. 将PDF文件另存为特定文件夹。
  3. 我遇到的障碍是将大量的工作表和范围打印成一个PDF文件,因为目前每个工作表或范围都会打印到自己的单个PDF文件中。

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

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

    如何将多个范围和工作表打印到单个.pdf?

4 个答案:

答案 0 :(得分:1)

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

Sub PrintArrayOfWorksheets()

    Dim vaWorksheets As Variant

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

    ThisWorkbook.Worksheets(vaWorksheets).PrintOut

End Sub

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

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

答案 1 :(得分:1)

见下面的代码。这用于使用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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

这是我尝试过的方法...我将工作表打印到PS文件,然后双击PS文件生成PDF。我知道这是一种解决方法,但打印到PS很快就会闪现。它要求您在PC上安装Adobe 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