ExcelをVBAでPDF化する際に、出力される用紙サイズが意図したものと異なることがあります。特に実機のプリンターが既定になっている場合、A4サイズで出したいのに別のサイズになってしまうといった問題が発生します。本記事では、その解決策として「Microsoft Print to PDF」を指定してPDFを正しく出力する方法を解説します。
なぜプリンター指定が必要なのか
ExcelのVBAでシートをPDF化するとき、内部的には「印刷処理」を経由します。そのため既定のプリンター設定が反映され、想定外のサイズで出力されてしまうことがあります。特に社内ネットワークプリンターが既定になっている場合、この問題が顕著に表れます。
このとき有効なのが、VBAで実行前に「Microsoft Print to PDF」をプリンターとして指定する方法です。これにより常にA4などの正しいサイズで出力が可能になります。
Application.ActivePrinterを使う場合の注意点
通常、VBAでプリンターを切り替えるにはApplication.ActivePrinterを利用します。しかし、この指定には「プリンター名 + ポート番号」が必要となり、環境によってポート番号が変わるため安定性に欠けます。
例えば、次のような記述が必要になります。
Application.ActivePrinter = "Microsoft Print to PDF on Ne01:"
しかし「Ne01」などのポート番号は環境ごとに異なるため、実行環境を変えるとエラーの原因になります。
PrintOutでプリンター名だけを指定する方法
一方で、PrintOutメソッドのActivePrinter引数を使えば、プリンター名だけで出力先を指定できます。
ActiveSheet.PrintOut ActivePrinter:="Microsoft Print to PDF"
この方法ならポート番号を気にする必要がなく、異なる環境でも動作するため便利です。
また、複数シートをまとめてPDF化したい場合は、以下のようにSheets(Array())を組み合わせることで対応できます。
Sheets(Array("Sheet1","Sheet2")).PrintOut ActivePrinter:="Microsoft Print to PDF"
PDF出力を直接行うExportAsFixedFormat
さらに安定した方法として、ExportAsFixedFormatを利用する手段があります。これはプリンターを介さず直接PDFを生成できるため、用紙サイズの問題が発生しにくいのが特徴です。
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:="C:\\test.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
この方法ではプリンター指定が不要になり、環境依存のトラブルを回避できます。
実際の運用例
例えば、毎日レポートを自動でPDF化して保存するツールを作成する場合、ExportAsFixedFormatを使えばプリンター設定を気にせずに処理できます。一方で、既存の印刷処理に統合したい場合や、特定のプリンタードライバを利用する場合にはPrintOutでの指定が有効です。
特に「Microsoft Print to PDF」を指定すれば、簡単に安定したPDF出力が可能になります。
まとめ
VBAでExcelをPDF化する際にサイズが崩れる場合、プリンターの指定が重要です。解決策としては以下の3つがあります。
Application.ActivePrinterを使う(ただしポート番号に注意)PrintOut ActivePrinterでプリンター名のみ指定するExportAsFixedFormatで直接PDFを生成する
特に環境依存を避けたい場合はExportAsFixedFormat、手軽にMicrosoft Print to PDFを指定したい場合はPrintOutを使うのが最適です。用途に合わせて使い分けることで、安定したPDF出力を実現できます。


コメント