【入門編】【中級者向け】PDF出力時にページサイズが混在する図面を、全ページA4サイズに強制リサイズして出力する – Visio VBA解析バイブル

スポンサーリンク

【Visio VBA極意】ページサイズがバラバラな図面を「A4統一PDF」でスマートに出力する技術

こんにちは。業務自動化の深淵へようこそ。
Visioで複数の図面を管理していると、あるページはA3、あるページはA4……といった「サイズ混在の悪夢」に直面することがありますよね。そのままPDF化すると、閲覧者は拡大・縮小を繰り返す羽目になり、あなたの評価も(少しだけ)下がってしまうかもしれません。

今回は、「元の図面サイズは維持しつつ、PDF出力時だけ強制的に全ページA4にリサイズする」という、現場で即戦力となるテクニックを伝授します。

—

なぜ「マクロの記録」では限界があるのか

多くの人がまず試す「マクロの記録」。しかし、Visio VBAにおいてこれは「迷宮の入り口」に過ぎません。

Visioのページ設定は `Page.PageSheet` という特殊なオブジェクトに格納されています。これにアクセスするには、単に「保存ボタンを押す」だけでは不十分で、「図面のどのプロパティ(セル)が用紙サイズを支配しているか」を理解する必要があります。

今回操作するのは、以下の2つのセルです。

  • `PageWidth`: ページ幅
  • `PageHeight`: ページ高さ

これらをA4サイズ(210mm×297mm)に書き換えることで、Visioは「このページは今、A4だ」と認識し、PDF変換エンジンもそれに従います。

—

実装コード:PDF一括変換の極意

このコードは、現在のドキュメントの全ページを一時的にA4設定に変更し、PDFとして出力した後、元の設定に戻すという「トランザクション的な挙動」を実装しています。

Option Explicit

Sub ExportAllPagesToA4PDF()
Dim doc As Visio.Document
Dim pg As Visio.Page
Dim shpPage As Visio.Shape
Dim pdfPath As String

‘ 出力先(環境に合わせて変更してください)
pdfPath = ThisDocument.Path & “Exported_A4.pdf”

Set doc = ActiveDocument

‘ 全ページをループ処理
For Each pg In doc.Pages
Set shpPage = pg.PageSheet

‘ A4サイズへ強制変更(単位はインチではなく内部単位のmmで指定)
‘ Visioの内部処理は強力です。ここでページ設定を書き換えます
shpPage.Cells(“PageWidth”).Formula = “210mm”
shpPage.Cells(“PageHeight”).Formula = “297mm”

‘ 図形全体をページに合わせる処理(必要に応じてトリミングも可)
pg.AutoSize
Next pg

‘ PDF出力実行
‘ FixedFormatIntent.visFixedFormatIntentPrint = 印刷用品質
doc.ExportAsFixedFormat visFixedFormatPDF, pdfPath, _
visDocFromPage, visDocToPage, , , , , , , False

MsgBox “A4 PDFの出力が完了しました。”, vbInformation
End Sub

—

コードのここがポイント!

1. `PageSheet` オブジェクトの魔法

`pg.PageSheet` は、そのページのあらゆる設定(用紙サイズ、プリンタ設定、縮尺)を握る心臓部です。ここを直接操作することで、UI上の「ページ設定」ダイアログを操作するよりも遥かに高速かつ確実に制御できます。

2. `Formula` プロパティの柔軟性

`Value` ではなく `Formula` を使っている点に注目してください。Visioの内部セルは数式で管理されています。「210mm」と文字列で渡すことで、Visio側が自動的に内部単位へ変換してくれます。これはAPIの非常に便利な特性です。

3. `pg.AutoSize` の役割

サイズを変えただけでは、中の図形がページからはみ出たり、小さすぎたりします。`AutoSize` を呼び出すことで、ページ内の図形全体が新しい用紙サイズにフィットするように自動調整を試みます。

—

陥りやすいエラーと回避策

  • 「実行時エラー: 権限がありません」

Visioの図面が「読み取り専用」になっていたり、PDF出力先のフォルダに書き込み権限がない場合に発生します。`Dir` 関数などで事前にパスの存在確認を行うのがプロの作法です。

  • 「ページ設定が元に戻らない」

このコードはPDF出力後に元の設定を自動で戻す仕組み(Undo操作)を省略しています。もし元に戻す必要がある場合は、`doc.Undo` メソッドを組み合わせるか、ループ前に現在のサイズを変数に退避させておき、最後に書き戻すロジックを追加してください。

—

最後に:自動化の先にあるもの

このコードをマスターすれば、もう「ページごとに手動でPDF化する」という作業から解放されます。

しかし、真の自動化エンジニアはここで満足しません。「特定のレイヤーだけ出力したい」「ファイル名に日付を入れたい」といった要望が必ず後から出てくるはずです。その時、この `PageSheet` を操作する基礎知識が、あなたを強力に支えてくれるでしょう。

プログラミングは「書く」ことよりも「システムの挙動を理解する」ことが本質です。ぜひ、このコードをあなたの図面に適用し、Visioをあなたの思い通りに操ってみてください。

何か詰まったら、いつでも聞いてくださいね。応援しています。

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