首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >通过VBA代码将多张图纸导出为.pdf

通过VBA代码将多张图纸导出为.pdf
EN

Stack Overflow用户
提问于 2016-12-30 19:34:26
回答 4查看 11.4K关注 0票数 5

我看过这个问题,但它没有完全回答我的问题-- excel vba not exporting pagesetup to pdf correctly

在使用代码创建.pdf输出时,我遇到了相同的问题,即每个工作表中的指定范围不能导出。每个工作表上的所有内容都会导出,因此每个工作表都分布在两个或多个页面上。将每张纸的打印范围设置为将指定区域打印到一张纸上。

我试着调整链接中的代码,但它似乎不适用于多个工作表。

我试图以未经修改的形式使用的代码

代码语言:javascript
复制
Sub ClientPDFOutput()

If Sheets("File Data").Range("FD_FileName") = "" Then
'   MsgBox ("Save the file before exporting to a .pdf fomrat"), vbInformation, "Save File"

'   Exit Sub
   Else
End If

ActiveSheet.Unprotect Password:=strPassword

Range("UI_Status") = "Creating client PDF output - Please wait"

SelectSheets

Application.ScreenUpdating = False

Sheets(arrSheets).Select

strFilename = "Test"

Selection.ExportAsFixedFormat _
   Type:=xlTypePDF, _
   filename:=ActiveWorkbook.Path & "\" & strFilename & ".pdf", _
   Quality:=xlQualityStandard, _
   IncludeDocProperties:=True, _
   IgnorePrintAreas:=True, _
   OpenAfterPublish:=False

Sheets("User Input").Select

Range("UI_Status") = "Client .pdf output created and saved"

ActiveSheet.Protect Password:=strPassword

Application.ScreenUpdating = True

MsgBox ("The client output in .pdf format has been created and saved"), vbInformation, ".pdf Created"

End Sub

代码语言:javascript
复制
Sub SelectSheets()

Dim rngSheets As Range

Set rngSheets = Sheets("File Data").Range("D_OutputSheets")

If rngSheets.Count = 1 Then
   arrSheets = rngSheets.Value2
   Else
   arrSheets = Application.Transpose(rngSheets.Value2)
End If

End Sub

经过更多的实验,我发现我在每一页上的打印范围都是关闭的,所以我对这些进行了更正。

我添加了代码来选择每个工作表的打印范围,然后选择所有工作表阵列的一部分,但阵列的第一个工作表中的打印范围在所有工作表中重复。因此,如果工作表1中的范围是B4:P61,工作表2的打印范围是B4:M48,则工作表2在选择工作表阵列时选择了B4:P61。

这将打印出所选的范围,这对于图纸1是正确的,但对于其余的图纸是错误的。

当我手动执行此操作时,依次选择all sheets、File、Export,然后导出所有sheets ranges,那么为什么将其记录并放入例程时会被忽略?

EN

回答 4

Stack Overflow用户

发布于 2016-12-30 21:20:41

请尝试更改IgnorePrintAreas属性。

代码语言:javascript
复制
Selection.ExportAsFixedFormat _
   Type:=xlTypePDF, _
   filename:=ActiveWorkbook.Path & "\" & strFilename & ".pdf", _
   Quality:=xlQualityStandard, _
   IncludeDocProperties:=True, _
   IgnorePrintAreas:=False, _
   OpenAfterPublish:=False
票数 0
EN

Stack Overflow用户

发布于 2017-02-15 22:49:48

我建议使用以下方法来确保您的页面设置将其修复为单个页面:

代码语言:javascript
复制
With ActiveSheet.PageSetup
 .FitToPagesWide = 1
 .FitToPagesTall = 1
End With

删除with语句中的第一行或第二行以满足您的喜好,或者同时保留这两行。

此外,我还看到你有selection.ExportAsFixedFormat。请确保您选择的区域正确或使用固定范围。您可能还希望动态确定最远的行/列,并将其添加到变量PrintRange中。Getting the actual usedrange。设置IgnorePrintAreas:=False

代码语言:javascript
复制
Dim PrintRange As Range

Set PrintRange = Range("A1:XX100")

PrintRange.ExportAsFixedFormat Type:=xlTypePDF, _
                                Filename:=Filename, _
                                Quality:=xlQualityStandard, _
                                IncludeDocProperties:=True, _
                                IgnorePrintAreas:=False, _
                                OpenAfterPublish:=False
票数 0
EN

Stack Overflow用户

发布于 2018-04-13 16:17:23

尝试添加"For each sheet in activeworkbook“(适用于我):

代码语言:javascript
复制
Sub Extract_pdfs()

Dim wb As Workbook
Dim sh As Worksheet

Set wb = ThisWorkbook

For Each sh In wb.Worksheets

    sh.Select

    pdf_name = sh.Name & ".pdf"

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ActiveWorkbook.Path & pdf_name, _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True

Next

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41395614

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档