【入門編】【中級者向け】PDF出力時に発生する「プリンタ用紙サイズ」の不一致を回避し、図面サイズに自動フィットさせる設定 – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの深淵:PDF出力で「用紙サイズが合わない」問題を根こそぎ解決する技術

こんにちは。自動化の海を渡るエンジニアの皆さん。
Visioで図面を描き、いざPDFに出力しようとしたとき、「せっかく綺麗に作った図面が、なぜか余白だらけになったり、一部が欠けて出力される…」という悪夢に遭遇したことはありませんか?

これはVisio VBAにおいて、最も多くのエンジニアが躓く「PageSetupオブジェクトの闇」です。今日は、マクロの記録から一歩先へ進み、図面サイズをPDFに完璧にフィットさせるための「職人の手技」を伝授します。

—

なぜ「PDF出力」でズレが生じるのか?

Visioの図面(VSDX)は、概念上「無限のキャンバス」です。一方で、PDFは「印刷という概念」を背負っています。
Visio VBAを操作する際、多くの人が陥る罠は「図面ページサイズ」と「プリンタ用紙設定(PageSetup)」の乖離です。

Visioは、アクティブなプリンタドライバの情報を読み込んでページレイアウトを決定します。つまり、PC環境やプリンタ設定によって、同じコードでも出力結果が変わってしまうのです。これを防ぐには、コード内で「用紙サイズと図面サイズを完全に同期させる」という鉄則を守る必要があります。

—

PDF出力最適化:実践コード

まずは、このコードを見てください。これが「意図した通りにPDFを吐き出す」ための標準装備です。

Sub ExportPageToPDF_PerfectFit()
Dim vsoPage As Visio.Page
Dim vsoDoc As Visio.Document
Dim strPath As String

‘ 現在のページとドキュメントを取得
Set vsoPage = ActivePage
Set vsoDoc = ActiveDocument

‘ PDFの保存先パス(適宜変更してください)
strPath = ThisDocument.Path & “ExportedDrawing.pdf”

‘ 【重要】ページ設定を最適化する
With vsoPage.PageSheet
‘ 用紙サイズを図面に合わせる(visPageSizeToFit)
.Cells(“PageSizeU”).Formula = .Cells(“PageWidthU”).Formula
.Cells(“PageHeightU”).Formula = .Cells(“PageHeightU”).Formula

‘ 印刷時の余白をゼロにする(これが切れる原因の9割)
.Cells(“Print_TopMargin”).Formula = “0”
.Cells(“Print_BottomMargin”).Formula = “0”
.Cells(“Print_LeftMargin”).Formula = “0”
.Cells(“Print_RightMargin”).Formula = “0”
End With

‘ PDFとしてエクスポート
‘ FixedFormat プロパティを活用するのが最も安定します
vsoDoc.ExportAsFixedFormat _
FixedFormatType:=visFixedFormatPDF, _
OutputFileName:=strPath, _
Intent:=visDocIntentPrint, _
PrintRange:=visPrintAll

MsgBox “PDF出力が完了しました:” & strPath
End Sub

—

コードの深層解説:なぜこれで上手くいくのか?

このコードには、ただの自動化以上の「知見」が詰まっています。

1. PageSheetへの直接アクセス

Visioのプロパティを `Page.PageSetup` 経由でいじるのは簡単ですが、実はもっと強力なのが `PageSheet` です。これは図面ページそのものが持つ「シェイプシート」という内部設定情報を指します。
ここに直接値を書き込むことで、Visioの描画エンジンに対して「このサイズで出力せよ」と強力な命令を出すことができます。

2. Print_Marginの強制ゼロ化

Visioのデフォルト設定は「印刷用」の余白を持っていることが多いです。PDF出力時にこの余白が残っていると、図面が本来のサイズからズレて縮小されてしまいます。`Print_TopMargin` などを明示的に `0` に設定することで、キャンバスの隅から隅までをPDFの領域として確保します。

3. ExportAsFixedFormat の採用

昔ながらの `PrintOut` メソッドを使うと、デフォルトプリンタの影響を強く受けます。しかし、`ExportAsFixedFormat` はVisioが内蔵するPDF変換エンジンを直接叩くため、プリンタドライバに依存しない安定した出力が可能になります。

—

よくあるエラーと対策

  • エラー:「プロパティの設定に失敗しました」
  • 原因:図面が「自動サイズ調整(Auto Size)」モードになっている可能性があります。コード実行前に `vsoPage.AutoSize = False` を記述して、ページサイズを固定してください。
  • PDFの余白がまだ消えない
  • 原因:プリンタの「非印刷領域(ハードウェア余白)」が干渉しています。上記のコードで `Print_Margin` をゼロにしても消えない場合は、用紙の向き (`PageOrientation`) が正しく設定されているか確認してください。

—

まとめ:自動化のエンジニアとして

Visio VBAは、オブジェクトのライフサイクルを深く理解すればするほど、強力な武器になります。
「マクロの記録」はあくまで入り口。今回のように、PageSheetの値をどう制御するかという「エンジンルーム」に触れることで、あなたの自動化ツールは「動くもの」から「信頼できるツール」へと進化します。

このコードをベースに、あなたの業務フローに合わせてカスタマイズしてみてください。分からないことがあれば、いつでもまた聞きに来てくださいね。
さあ、次回の自動化で、さらなる高みを目指しましょう!

タイトルとURLをコピーしました