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

将创建多个PDF的VBA更改为单个PDF,vba,excel,pdf,Vba,Excel,Pdf,下面的代码可以很好地将PDF从工作表3创建到名为“Post”的工作表,同时忽略任何隐藏的工作表。它为每个工作表创建一个单独的PDF。这将链接到用户单击的形状,然后提示用户选择一个文件夹以保存所有PDF 我正试图修改下面的代码,以执行完全相同的操作,只是在第3页和“Post”之间创建一个单独的PDF,每个工作表都可见。 我已经对代码进行了一段时间的讨论,我想知道是否有人知道实现这一点的最佳方法 Sub SaveAllPDF() Dim i As Integer Dim Fname As Strin

下面的代码可以很好地将PDF从工作表3创建到名为“Post”的工作表,同时忽略任何隐藏的工作表。它为每个工作表创建一个单独的PDF。这将链接到用户单击的形状,然后提示用户选择一个文件夹以保存所有PDF

我正试图修改下面的代码,以执行完全相同的操作,只是在第3页和“Post”之间创建一个单独的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
Sub SaveAllPDF()
作为整数的Dim i
作为字符串的Dim Fname
暗淡的TabCount一样长
TabCount=工作表(“Post”)。索引
'将TabCount设置为最后一个要添加PDF的单元格
将对话框设置为文件对话框
将路径设置为字符串
Set dialog=Application.FileDialog(msoFileDialogFolderPicker)
dialog.AllowMultiSelect=False
如果dialog.Show=-1,则
路径=对话框。选择编辑项(1)
'开始循环。
对于i=3到TabCount
'Set i=要以从左到右到TabCount的顺序生成PDF的第一张图纸的编号
如果图纸(i).可见,则图纸可见
其他的
附页(一)
Fname=.Range(“C15”)和“&.Range(“E13”)和“-”和.Range(“B1”)
'上面的Fname等于PDF文件名将使用的单元格
'下面的文件夹目录是保存PDF文件的位置
.ExportAsFixedFormat类型:=xlTypePDF,文件名:=path&“\”&Fname,质量:=xlQualityStandard_
IncludeDocProperties:=True,IgnorePrintAreas:=False,OpenAfterPublish:=False
以
如果结束
接下来我
调用Shell(“explorer.exe”&“&path&”\”,vbNormalFocus)
'这将打开保存PDF的文件夹
如果结束
端接头

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

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
Sub SaveAllPDF()
作为整数的Dim i
作为字符串的Dim Fname
暗淡的TabCount一样长
Dim aSheetnames作为变体
TabCount=工作表(“Post”)。索引
'将TabCount设置为最后一个要添加PDF的单元格
将对话框设置为文件对话框
将路径设置为字符串
Set dialog=Application.FileDialog(msoFileDialogFolderPicker)
dialog.AllowMultiSelect=False
如果dialog.Show=-1,则
路径=对话框。选择编辑项(1)
'开始循环。
对于i=3到TabCount
'Set i=要以从左到右到TabCount的顺序生成PDF的第一张图纸的编号
如果图纸(i).可见,则图纸可见
其他的
redim preserve aSheetnames(i-2)'减去2,因为i从3开始
asheetnames(i-2)=图纸(i)。名称“构建要打印的图纸数组”
如果结束
下一个
Fname='在这里为批量文件名添加一些内容
工作表(asheetnames)。ExportAsFixedFormat类型:=xlTypePDF,文件名:=path&“\”&Fname,质量:=xlQualityStandard_
IncludeDocProperties:=真,IgnorePrintAreas:=假,OpenAfterPublish:=真
如果结束
端接头

注意:没有明示或暗示的保证,您可能需要进行一些调试,因为这是我不知道的,但它可能会工作…

与其导出循环内部的每个工作表,不如将整个工作簿导出到循环外部

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


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

这在我的文件中起作用,用于通过电子邮件发送可见选项卡,因为pdf供您使用,而不同的应用程序也适用于此……您不需要用它来编码隐藏/不隐藏

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

谢谢你的回复。不幸的是,不能假设Acrobat在每台机器上,我无法控制它。工作表3之外的工作表正在更改为“发布”,无法包含在此PDF中,因此无法导出整个工作簿。虽然这确实激发了一个想法,可能会尝试将工作表3之外的所有工作表隐藏到“Post”中(即隐藏工作表1、2、16等)。“帖子”是第14页。玩弄这个想法。尽管如此,我不认为我想从I中减去to,因为我正试图将第3页捕捉到“Post”。谢谢你的回复,我会仔细考虑一下这个想法,看看能不能实现work@user3026842
aSheetnames()
数组从1开始,而
i
从3开始。如果不从中减去2,数组中将有2个空点,我不确定这会对
.ExportAsFixedFormat
造成什么影响。但是,正如我所说,未经测试的代码可能会将您推向一个正确的方向,所以请看看它会给您带来什么。啊,明白了,谢谢您的解释。我正处于VBA学习的早期阶段。我想这会有用的,我会让你知道的谢谢你的回复!研究如何确保第3页至“Post”之外的所有工作表都被隐藏,同时保持第3页至“Post”之间的工作表不受影响,然后应用您提到的常规导出为PDF代码。如果我能让它工作,我会发布。我现在确实通过按名称隐藏所有工作表,如果它们不在Sheet3和Sheet“post”之间。这是一种手动解决方法,好像将来添加了一个需要隐藏在工作表3之外的工作表来“发布”,然后我必须进入并添加要隐藏的代码。我仍然在寻找答案,如果我找到了,我会发布解决方案!