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

Excel 将多个范围和工作表打印到一个PDF文件,excel,vba,excel-2010,Excel,Vba,Excel 2010,我有一份工作表,经常需要按工作表和范围的特定顺序打印。我想做的是 打印特定的工作表和范围,以便生成单个PDF文件 将PDF文件作为特定日期保存到特定文件夹 我遇到的障碍是将大量的工作表和范围打印到一个PDF文件中,因为当前每个工作表或范围打印到自己的单个PDF文件中 我假设有一种方法可以将所有必要的表和范围放入数组中,然后对该变量进行.print输出,但是我还没有做到这一点 我使用的是Excel 2010,所以我只使用“Adobe PDF”打印机 如何将多个范围和工作表打印到单个.pdf?要打印

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

  • 打印特定的工作表和范围,以便生成单个PDF文件
  • 将PDF文件作为特定日期保存到特定文件夹
  • 我遇到的障碍是将大量的工作表和范围打印到一个PDF文件中,因为当前每个工作表或范围打印到自己的单个PDF文件中

    我假设有一种方法可以将所有必要的表和范围放入数组中,然后对该变量进行.print输出,但是我还没有做到这一点

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


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

    要打印多个工作表,可以将工作表名称放入如下数组中

    Sub PrintArrayOfWorksheets()
    
        Dim vaWorksheets As Variant
    
        vaWorksheets = Array("Sheet1", "Sheet2", "Sheet3")
    
        ThisWorkbook.Worksheets(vaWorksheets).PrintOut
    
    End Sub
    
    打印为PDF有特殊问题。如果您使用“官方”加载项创建PDF,它可能会像上面那样工作(很抱歉,我现在无法尝试)。在过去,当我使用其他打印成PDF的打印机驱动程序时,我发现所有(或至少大多数)页面设置属性必须在工作表上相同,否则将在多个作业中打印。这意味着没有收缩以适应,所有的利润必须是相同的。我记不起所有导致问题的属性,只是这两个属性肯定有问题,方向肯定没有问题


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

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

    以下是我尝试过的一种方法。。。我将工作表打印到PS文件中,然后双击PS文件生成PDF。我知道这是一个解决办法,但打印到PS是闪电般的快。它要求您的电脑上安装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
    

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

    说得好,我使用的是已经安装了Adobe PDF打印机的Excel 2010。这是向前迈出的一大步。感谢您的回答,我遇到的一个问题是,出于某种原因,第一张工作表打印到单个PDF,然后另外两张工作表打印到单独的PDF。这可能与相同的页面设置属性有关。此外,这并没有解决我的问题,包括某些用户定义的范围。