【问题标题】:Changing VBA that creates Multiple PDFs to Single PDF将创建多个 PDF 的 VBA 更改为单个 PDF
【发布时间】:2015-04-22 18:04:11
【问题描述】:

下面的代码非常适合创建从工作表 3 到名为“发布”的工作表的 PDF,同时忽略任何隐藏的工作表。它为每个工作表创建一个单独的 PDF。这与用户单击的形状相关联,然后系统会提示您选择一个文件夹来保存所有 PDF。

我正在尝试更改下面的代码以执行完全相同的操作,除了为工作表 3 和“发布”之间的每个可见工作表创建一个 PDF。

我一直在研究代码,想知道是否有人知道完成此操作的最佳方法?

Sub SaveAllPDF()
Dim i As Integer
Dim Fname As String
Dim TabCount As Long

TabCount = Sheets("Post").Index
'Set the TabCount to the last cell you want to PDF

Dim dialog As FileDialog
Dim path As String

Set dialog = Application.FileDialog(msoFileDialogFolderPicker)
dialog.AllowMultiSelect = False
If dialog.Show = -1 Then
    path = dialog.SelectedItems(1)
    ' Begin the loop.
    For i = 3 To TabCount
    'Set i = the number of the first sheet you want to PDF in order from left to right To TabCount
        If Sheets(i).Visible <> xlSheetVisible Then
        Else
            With Sheets(i)
                Fname = .Range("C15") & " " & .Range("E13") & "-" & .Range("B1")
                'The Fname above is equaling the cells that the PDF's filename will be
                'The folder directory below is where the PDF files will be saved
                .ExportAsFixedFormat Type:=xlTypePDF, FileName:=path & "\" & Fname, Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
            End With
        End If
    Next i

    Call Shell("explorer.exe" & " " & path & "\", vbNormalFocus)
    'This opens the folder where the PDFs are saved
End If
End Sub

【问题讨论】:

  • 如果它们不在Sheet3和Sheet“Post”之间,我确实可以通过按名称隐藏所有Sheets来实现这一点。一种手动解决方法,好像将来添加了一张需要隐藏在工作表 3 之外的工作表以“发布”,然后我必须进入并添加要隐藏的代码。我仍在寻找答案,如果找到,我会发布解决方案!

标签: vba excel pdf


【解决方案1】:

如果您用鼠标选择多个工作表选项卡,然后选择打印,它会将它们全部打印为一个打印作业,因此请在代码中尝试一下:

Sub SaveAllPDF()
Dim i As Integer
Dim Fname As String
Dim TabCount As Long
Dim aSheetnames As Variant

TabCount = Sheets("Post").Index
'Set the TabCount to the last cell you want to PDF

Dim dialog As FileDialog
Dim path As String

Set dialog = Application.FileDialog(msoFileDialogFolderPicker)
dialog.AllowMultiSelect = False
If dialog.Show = -1 Then
    path = dialog.SelectedItems(1)
    ' Begin the loop.
    For i = 3 To TabCount
    'Set i = the number of the first sheet you want to PDF in order from left to right To TabCount
        If Sheets(i).Visible <> xlSheetVisible Then
        Else
            redim preserve aSheetnames(i-2)  'subtract 2, since i starts at 3
            asheetnames(i-2) = sheets(i).name  'build array of the sheets to print
        End If
     Next
     Fname = 'make something up here for your bulk file name
     Sheets(asheetnames).ExportAsFixedFormat Type:=xlTypePDF, FileName:=path & "\" & Fname, Quality:=xlQualityStandard, _
                IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

End If
End Sub

注意:没有明示或暗示的保证,您可能需要进行一些调试,因为这不是我的想法,但它可能会起作用......

【讨论】:

  • 玩弄这个想法。虽然,我不认为我想从 i 中减去,因为我正在尝试将工作表 3 捕获到“发布”。感谢您的回复,我会尝试一下这个想法,看看我是否可以让它发挥作用
  • @user3026842 aSheetnames() 数组从 1 开始,而 i 从 3 开始。如果你不从中减去 2,你将在数组中得到 2 个空点,我不确定这会对.ExportAsFixedFormat 造成什么影响。但是,正如我所说,未经测试的代码会将你推向可能正确的方向,所以看看它会把你带到哪里。
  • 啊,明白了,感谢您的解释。我处于 VBA 学习的早期阶段。我认为这会奏效,我会告诉你
【解决方案2】:

这在我的文件中适用于通过电子邮件发送可见选项卡作为 pdf 供您使用,而不同的相同适用...您不需要使用此代码进行隐藏/未隐藏

' Export activesheet as PDF
 With ActiveWorkbook
      .ExportAsFixedFormat Type:=xlTypePDF, Filename:=PdfFile,  
              Quality:=xlQualityStandard, IncludeDocProperties:=True,     
                     IgnorePrintAreas:=False, OpenAfterPublish:=False
 End With

【讨论】:

  • 感谢您的回复!研究如何确保隐藏工作表 3 到“发布”之外的所有工作表,同时保持工作表 3 到“发布”之间的工作表不受影响,然后将常规导出应用为您提到的 PDF 代码。如果我可以让它工作,我会发布
【解决方案3】:

不是在循环内部导出每个工作表,而是使用Workbook.ExportAsFixedFormat 导出整个工作簿在循环外部

使用此方法,参数FromTo 允许您选择要输出的页面。但是,您需要知道可见工作表页码的位置。它可能不一定按照他们的工作表编号,因为某些工作表可以打印成多页。通过手动将整个工作簿保存为 PDF 来查找页码。

或者,您可以继续循环并使用Adobe Acrobat SDK 合并多个 PDF。请参阅 AcroExch.AvDocAcroExch.PDDoc 对象。但是,您的 Excel 工作簿的用户需要在其计算机上安装 Adob​​e Acrobat(而不仅仅是免费的 Reader)才能在 VBA 中引用 Adob​​e API。

【讨论】:

  • 感谢您的回复。不幸的是,不能假设 Acrobat 在每台机器上,我无法控制它。工作表 3 之外的工作表数量已更改为“发布”,无法包含在此 PDF 中,因此无法选择导出整个工作簿。尽管这确实激发了一个想法,即尝试将工作表 3 之外的所有工作表隐藏到“发布”(即隐藏工作表 1、2、16 等)。 “发布”是第 14 页。
猜你喜欢
  • 2022-11-10
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2013-03-03
相关资源
最近更新 更多