我有代码将工作表格式化为所需的设置和布局(一页宽,高一些)。当我运行代码(长宏的一部分)时,它正确格式化页面设置。
如果我手动导出并将其另存为pdf,那么它会使用正确的页面设置,从而生成横向的单页PDF。但是,由VBA完成的相同导出会生成一个长度为几页且纵向的PDF。
我无法弄清楚它为什么会这样做。我已尝试过各种解决方案,例如在导出之前选择工作表,但都无济于事。
感谢任何帮助。
代码如下所示:
Sub SaveAsPDF()
Sheets(ReportWsName).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
[SaveFolderPath] & "\" & ReportWsName, Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
False
End Sub
更新:
用于格式化页面设置的代码(因为它相当长,我只是添加了该子设置的相关部分)
Private Sub CreateNewReport(ProvisionCode As String, TimeFrom As Date, TimeTo As Date)
... other code here...
'Format report to create the desired layout
With Worksheets(ReportWsName)
'Delete unnecessary data and format the rest
.Range("A:B,D:D,F:G,J:M,O:O,Q:S").Delete Shift:=xlToLeft
.Range("A:F").EntireColumn.AutoFit
.Range("C:C, E:F").ColumnWidth = 30
With .Range("G:G")
.ColumnWidth = 100
.WrapText = True
End With
'Insert standard formating header form Reporting template
.Rows("1:2").Insert
wsReportTemplate.Range("1:3").Copy .Range("A1")
.Range("A2") = "Notes Report for " & ProvisionCode & " (" & TimeFrom & " - " & TimeTo & ")"
'Insert standard formating footer form Reporting template
wsReportTemplate.Range("A6:G7").Copy .Range("A" & .UsedRange.Rows.Count + 2)
'Ensure all data is hard coded
.UsedRange.Value = .UsedRange.Value
'Format Print Area to one Page
With ActiveSheet.PageSetup
.PrintArea = Worksheets(ReportWsName).UsedRange
.Orientation = xlLandscape
.FitToPagesWide = 1
End With
End With
End Sub
答案 0 :(得分:4)
我找到了似乎是解决方案:
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.Orientation = xlLandscape
.Zoom = False
'.PrintArea = Worksheets(ReportWsName).UsedRange
.FitToPagesWide = 1
'.FitToPagesTall = 1
End With
Application.PrintCommunication = True
我需要将Application.PrintCommunication部分添加到等式中。无论出于何种原因,如果我在没有它的情况下运行代码,Excel将覆盖我放置的设置。
答案 1 :(得分:3)
我认为问题是您需要将.Zoom = False
添加到您的页面设置代码中:
'Format Print Area to one Page
With ActiveSheet.PageSetup
.PrintArea = Worksheets(ReportWsName).UsedRange
.Orientation = xlLandscape
.FitToPagesWide = 1
.Zoom = False 'I have added this line
End With
根据我的尝试,这应该为你解决。
让我知道它是怎么回事!
编辑:也许您需要:
'Format Print Area to one Page
With ActiveSheet.PageSetup
.PrintArea = Worksheets(ReportWsName).UsedRange
.Orientation = xlLandscape
.FitToPagesWide = 1
.FitToPagesTall = 1
.Zoom = False 'I have added this line
End With
EDIT2:如果您更改了该怎么办:
.PrintArea = Worksheets(ReportWsName).UsedRange
要
.PrintArea = Worksheets(ReportWsName).UsedRange.Address
答案 2 :(得分:2)
是的!!!,我遇到了同样的问题:我无法导出已经应用了页面设置设置的工作表。
在尝试Application.PrintCommunication之前,我测试了Wait和Sleep命令但没有成功。最后我通过使用CopyPicture方法跳过了这个问题,添加了一个图表页面,然后将其导出为pdf,但是我的pdf中的分辨率并不好,我无法使用边距。
所以只需在代码之前添加Application.PrintCommunication = false,就像CaptainABC这样的页面设置设置说,最重要的是:在代码之后用Application.PrintCommunication = true关闭。
感谢您提供这篇有用的帖子。