2017-12-18 217 views
0

我试图将我的工作表保存为使用vba的pdf文件。工作表比A4页宽,并包含几个形状(从一边到另一边)。我希望工作表能够放在一个A4页面上,所以它应该按照屏幕上看到的那样进行重新调整。我正在使用以下代码:将图表另存为PDF

Sub Print_PDF() 

Dim sFilename As String 

Worksheets.Add.Name = "Helpsheet" 
sFilename = "G:\anything\test.pdf" 
ThisWorkbook.Worksheets("Newsletter").Range("A2:D81").CopyPicture xlScreen, xlBitmap 

ThisWorkbook.Sheets("Helpsheet").Activate 
ThisWorkbook.Sheets("Helpsheet").Paste 
ActiveSheet.PageSetup.PrintArea = ThisWorkbook.Sheets("Helpsheet").Range("A1:O86") 
With ActiveSheet.PageSetup 
    .Orientation = xlPortrait 
    .FitToPagesWide = 1 
    .FitToPagesTall = 1 
End With 

ThisWorkbook.Sheets("Helpsheet").ExportAsFixedFormat Type:=xlTypePDF, Filename:=sFilename, quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True 

Application.DisplayAlerts = False 
ThisWorkbook.Sheets("Helpsheet").Delete 
Application.DisplayAlerts = True 

End Sub 

代码实际上会将PDF文件保存在预期位置。但是,PDF文件是4页而不是预期的1页。所以看起来这个打印区域没有正确定义。我究竟做错了什么?

回答

3

您是否尝试过按照此示例调整PageSetup参数?

Application.PrintCommunication = False 
With ActiveSheet.PageSetup 
    .Orientation = xlLandscape 
    .Zoom = False 
    '.PrintArea = Worksheets(ReportWsName).UsedRange 
    .FitToPagesWide = 1 
    '.FitToPagesTall = 1 
End With 
Application.PrintCommunication = True 

想一想明确地将.Zoom设置为false很重要。

来源: excel vba not exporting pagesetup to pdf correctly

+0

将缩放设置为false会有诀窍。谢谢你节省我的一天! – Roosz0rd

0

假设活动页也是sheet("Helpsheet") 打印区域需要打印范围的地址。

ActiveSheet.PageSetup.PrintArea = ThisWorkbook.Sheets("Helpsheet").Range("A1:O86").Address 
+0

谢谢你的评论。因为我使用了ThisWorkbook.Sheets(“帮助表”),所以活动页面实际上是工作表(“帮助表”)。我已经尝试了您的解决方案,但仍然是PDF文件是4页。 – Roosz0rd