使用Excel VBA将选定的工作表导出为PDF

20

我正在使用以下代码将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

我的问题是它只能导出第一个工作表。有什么想法吗?

3个回答

30

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

考虑:

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

1
这只是为我打印了一张空白纸。不确定为什么? - HattrickNZ
1
仅使用选择似乎会在Excel 2013中导出一个空白表。正如ASP8811和HattrickNZ的答案中所看到的那样,使用ActiveSheet对我们有效。 - Adrian
你会因为一个好答案而获得+1分,但如果你的子程序名字很聪明,也会获得额外的+1分。 - Dexter Whelan
Selection.ExportAsFixedFormat 只能导出所选单元格,或在 Office 365(Office 2016)中导致空白的 PDF 打印。目前只能逐个工作表进行导出。 - DrMarbuse

9

我很困惑。同时我正在使用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文件。 我尝试使用选项对话框中的选择功能手动保存这两个页面,以保存我选择的两个工作表,但获得了空白页。当我尝试使用“活动工作表”选项时,我得到了想要的结果。当我录制此宏时,Excel 成功发布PDF时使用了ActiveSheet。是什么原因呢?

FileName等于什么?FileName可以包含路径吗?myref - HattrickNZ
我现在使用 Array(1,2) 出现了一个错误,这是什么意思?好像它只接受一个工作表名称? - HattrickNZ
抱歉这是事后了。我有一段时间没有登录了。文件名应包括您要保存到的位置的文件路径以及文件名。 - asp8811

4

在我遇到@asp8811的答案时遇到了问题,这是我想出来的解决办法(也许是我自己的困难)

' 这将把前两个工作表放入PDF中 ' 注意每个工作表都应该通过分页控制打印,这有点繁琐 ' 这将明确地将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而不是Selection的澄清,因为当时我没有足够的声望来发表评论。你的解决方案更适合处理多个工作表。 - asp8811

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接