ワークシートを目的のセットアップとレイアウト(横向きで幅と高さが1ページ)にフォーマットするコードがあります。コード(長いマクロの一部)を実行すると、ページ設定が正しくフォーマットされます。
手動でエクスポートしてPDFとして保存すると、正しいページ設定が使用され、横向きの1ページが生成されます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
私は解決策と思われるものを見つけました:
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を使用せずにコードを実行すると、Excelが設定した設定を上書きしてしまいます。
問題は、ページ設定コードに_.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
はい!!!、同じ問題が発生しました。ページ設定設定が既に適用されているシートをエクスポートできませんでした。
Application.PrintCommunicationを試す前に、WaitコマンドとSleepコマンドをテストしましたが成功しませんでした。最後に、CopyPictureメソッドを使用してこの問題をスキップし、グラフページを追加してからpdfにエクスポートしましたが、pdfでの解像度がうまくいかず、余白で遊ぶことができませんでした。
したがって、コードの前にApplication.PrintCommunication = falseを追加するだけで、CaptainABCが言うように、最も重要なページ設定設定で、コードの後にApplication.PrintCommunication = trueで閉じます。
この便利な投稿をありがとうございます。