将创建多个PDF的VBA更改为单个PDF

时间:2015-04-22 18:04:11

标签: excel vba excel-vba pdf

以下代码非常适用于从工作表3到名为" Post"的工作表创建PDF。而忽略任何隐藏的床单。它为每个工作表创建单独的PDF。这与用户单击的形状相关联,然后提示您选择用于保存所有PDF的文件夹。

我试图更改下面的代码来执行完全相同的操作除了使用工作表3和&#34之间的每个可见工作表创建单个PDF;发布&#34;。 < / p>

我一直在按摩代码一段时间,我想知道是否有人知道实现这一目标的最佳方式?

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

3 个答案:

答案 0 :(得分:1)

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

@Entity
@XmlRootElement
public class Persoon extends Contact implements Serializable {


    @Temporal(DATE)
    private Date geboorteDatum;

    public Persoon() {
    }
}

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

答案 1 :(得分:1)

这适用于我的文件,用于通过电子邮件发送可见标签,因为pdf是您的使用,但同样适用...您不需要使用此代码隐藏/不隐藏

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

答案 2 :(得分:0)

不是将每个工作表导出循环,而是使用Workbook.ExportAsFixedFormat将整个工作簿导出循环。

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

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