我看过这个问题,但它没有完全回答我的问题-- excel vba not exporting pagesetup to pdf correctly
在使用代码创建.pdf输出时,我遇到了相同的问题,即每个工作表中的指定范围不能导出。每个工作表上的所有内容都会导出,因此每个工作表都分布在两个或多个页面上。将每张纸的打印范围设置为将指定区域打印到一张纸上。
我试着调整链接中的代码,但它似乎不适用于多个工作表。
我试图以未经修改的形式使用的代码
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和
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,那么为什么将其记录并放入例程时会被忽略?
发布于 2016-12-30 21:20:41
请尝试更改IgnorePrintAreas属性。
Selection.ExportAsFixedFormat _
Type:=xlTypePDF, _
filename:=ActiveWorkbook.Path & "\" & strFilename & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False发布于 2017-02-15 22:49:48
我建议使用以下方法来确保您的页面设置将其修复为单个页面:
With ActiveSheet.PageSetup
.FitToPagesWide = 1
.FitToPagesTall = 1
End With删除with语句中的第一行或第二行以满足您的喜好,或者同时保留这两行。
此外,我还看到你有selection.ExportAsFixedFormat。请确保您选择的区域正确或使用固定范围。您可能还希望动态确定最远的行/列,并将其添加到变量PrintRange中。Getting the actual usedrange。设置IgnorePrintAreas:=False
Dim PrintRange As Range
Set PrintRange = Range("A1:XX100")
PrintRange.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=Filename, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False发布于 2018-04-13 16:17:23
尝试添加"For each sheet in activeworkbook“(适用于我):
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 Subhttps://stackoverflow.com/questions/41395614
复制相似问题