Excel – 通过VBA代码将多个工作表导出为.pdf

道歉的任何格式错误的post,但这是我第一次使用该网站,我不太了解fquestion格式化指令。

我已经看到这个问题在板上,但它不完全回答我的问题,但它可能是有用的任何人寻求帮助 – Excel VBA不导出页面设置为PDF正确

我有完全相同的问题,每个工作表中指定的范围不被导出时,利用代码来创build.pdf输出。 导出的是每个工作表上的所有内容,因此每个工作表都分布在两个或更多个页面上。 每张纸的打印范围设置为将指定区域打印到1张纸上。

我试图修改上面的链接中的代码,但它似乎不适用于多张表。

下面是我尝试使用的无代码forms的代码

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 

TIA

经过多次实验后,我确定每个页面上的打印范围都已closures,因此可以对其进行更正。

我还添加了一些代码来select每个工作表的打印范围之前,他们都被选为表格数组的一部分,但在第一张数组中的打印范围被复制到所有工作表…所以如果范围在纸张1中是B4:P61并且纸张2的打印范围是B4:M48,当select了纸张arrays时,纸张2具有被select的B4:P61。

然后打印出对于纸张1正确的选定范围,但对于其余纸张则是错误的。

当我通过select所有表单,文件,导出来手工完成这个操作时,所有的表单打印范围都会被导出,为什么当这个被logging下来并放入一个例程时,它被忽略了?

谢谢

请尝试更改IgnorePrintAreas属性。

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

我会build议使用以下来确保您的页面设置将其修复到一个页面:

 With ActiveSheet.PageSetup .FitToPagesWide = 1 .FitToPagesTall = 1 End With 

删除with语句中的第一行或第二行以符合您的偏好,或保留两者。

此外,我看到你有selection.ExportAsFixedFormat 。 确保您select的区域正确或使用固定范围。 您可能还需要dynamic确定最远的行/列,并将其添加到variablesPrintRange 。 获取实际使用的范围 。 设置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