2016-12-30 197 views
5

对帖子中的任何格式错误表示歉意,但这是我第一次使用该网站,并且我不太了解fquestion格式化指令。Excel - 通过VBA代码将多张纸导出为.pdf

我看到的董事会这个问题,但它并不完全回答我的问题,但它可以为任何人都希望帮助是有用的 - excel vba not exporting pagesetup to pdf correctly

我恰好具有在每个指定范围内的同样的问题在使用代码创建.pdf输出时,不会导出工作表。导出的内容是每个工作表上的所有内容,因此每个工作表都分布在2个或更多页面上。每张纸的打印范围设置为将指定区域打印到1张纸上。

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

我试图在其不适应的形式使用的代码如下

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

后多一点尝试我建立了我的打印范围上的每个的页面已经关闭,所以纠正了这些。

我还添加了一些代码来选择每张纸的打印范围,然后它们全部被选作纸张数组的一部分,但是数组的第一张纸的打印范围正在所有纸张上被复制......所以如果纸张1中的范围是B4:P61并且纸张2的打印范围是B4:M48,则当选择了纸张阵列时,纸张2将选择B4:P61。

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

当我通过选择所有工作表,文件,导出来手动完成此操作时,所有工作表的打印范围都将被导出,为什么当这被记录并放入例程时,它将被忽略?

感谢

回答

0

请尝试更改IgnorePrintAreas财产。

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

我会建议使用以下,以确保您的页面设置它修复到一个页面:

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

删除无论是在with语句中的第一或第二行根据自己的喜好,或保留都。

此外我看你有selection.ExportAsFixedFormat。确保您选择的区域正确或使用固定范围。您可能还想动态确定最远的行/列,并将其添加到变量PrintRangeGetting 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