【问题标题】:Excel VBA to Export Selected Sheets to PDFExcel VBA 将选定的工作表导出为 PDF
【发布时间】:2014-01-12 02:29:23
【问题描述】:

我正在使用以下代码将选定的工作表从 Excel 2010 导出到单个 pdf 文件...

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

ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\temp.pdf", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

我的问题是它只导出第一张纸。有什么想法吗?

【问题讨论】:

    标签: excel vba pdf export


    【解决方案1】:

    选择一组工作表后,您可以使用选择

    考虑:

    Sub luxation()
        ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
        Selection.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:="C:\TestFolder\temp.pdf", _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=True, _
            IgnorePrintAreas:=False, _
            OpenAfterPublish:=True
    End Sub
    

    编辑#1:

    进一步的测试表明,这种技术取决于每个工作表上选定的单元格组。要获得全面的输出,请使用以下内容:

    Sub Macro1()
    
       Sheets("Sheet1").Activate
       ActiveSheet.UsedRange.Select
       Sheets("Sheet2").Activate
       ActiveSheet.UsedRange.Select
       Sheets("Sheet3").Activate
       ActiveSheet.UsedRange.Select
    
       ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
       Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
          "C:\Users\James\Desktop\pdfmaker.pdf", Quality:=xlQualityStandard, _
          IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
          True
    End Sub
    

    【讨论】:

    • 这只会为我打印一张空白纸。不知道为什么?
    • 使用选择似乎只在 Excel 2013 中导出一张空白工作表。在 ASP8811 和 HattrickNZ 的答案中看到的 ActiveSheet 的使用确实对我们有用。
    • 你会得到一个 +1 的好答案,但你的子的名字也是如此。这很聪明。
    【解决方案2】:

    我对此很困惑。我也在运行 Excel 2010。我尝试使用以下方法将两张工作表保存为一个 PDF:

        ThisWorkbook.Sheets(Array(1,2)).Select
        **Selection**.ExportAsFixedFormat xlTypePDF, FileName & ".pdf", , , False
    

    但我得到的只是空白页。它保存了两张纸,但没有任何内容。直到我用过:

        ThisWorkbook.Sheets(Array(1,2)).Select
        **ActiveSheet**.ExportAsFixedFormat xlTypePDF, FileName & ".pdf", , , False
    

    我得到了一个包含两张纸的 PDF 文件。

    我尝试使用“选项”对话框中的“选择”手动保存这两个页面,以保存我选择的两张纸,但得到了空白页。当我尝试 Active Sheet(s) 选项时,我得到了我想要的。当我将此记录为宏时,Excel 在成功发布 PDF 时使用了 ActiveSheet。什么给了?

    【讨论】:

    • FileName 等于什么? FileName 可以包含路径吗? myref
    • 我现在收到这个Array(1,2) 的错误,这是什么意思?好像它只接受 1 个工作表名称?
    • 对不起,这是事后的事。我有一段时间没有登录了。文件名应包括要保存到的位置的文件路径以及文件名。
    【解决方案3】:

    这是我在@asp8811 回答问题时想到的(也许是我自己的困难)

    ' 这会将前 2 张纸放入 pdf ' 请注意,每个 ws 都应该使用分页符来控制打印,这有点繁琐 ' 这将明确地将 pdf 放在当前目录中

    Sub luxation2()
        Dim Filename As String
        Filename = "temp201"
    
    
    
    Dim shtAry()
    ReDim shtAry(1) ' this is an array of length 2
    For i = 1 To 2
    shtAry(i - 1) = Sheets(i).Name
    Debug.Print Sheets(i).Name
    Next i
    Sheets(shtAry).Select
    Debug.Print ThisWorkbook.Path & "\"
    
    
        ActiveSheet.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "/" & Filename & ".pdf", , , False
    
    End Sub
    

    【讨论】:

    • 我的只适用于前两张纸,因为这就是我在代码中想要的。我的回答并不是真正的答案,更多的是关于使用 ActiveSheet 而不是选择的澄清,因为我当时没有评论的声誉。您的解决方案更适合使用多张纸。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-04
    • 2021-04-22
    • 2020-06-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多