こんにちは!Visioの自動化の世界へようこそ。
「マクロの記録」ボタンを押して図形を描いてみたものの、いざVBAのコードを覗いてみたら呪文のような文字列が並んでいて面食らった……そんな経験はありませんか?
さらに、苦労して作った図面をPDFに書き出したら、意図しないところでページが分割されたり、用紙の端っこが切れてしまったりして頭を抱えたことがある方も多いはずです。
今回は、そんなVisio VBAのつまずきポイントを華麗にクリアし、「図面をPDF化するときに、ページサイズを用紙にぴったり自動合わせする」ための極意を伝授します。ここをクリアすれば、Visio VBAの基本と「お作法」はバッチリですよ!一緒に優しく紐解いていきましょう。
—
なぜVisioのPDF出力はレイアウトが崩れるのか?
Visioは、一般的なWordやExcelと違って「無限に広がるキャンバス」を持っています。これが非常に便利な反面、PDFや印刷という「有限の紙のサイズ」に落とし込むときに問題が起きます。
プログラムを書かずに手動でPDF出力しようとすると、こんなイライラを感じたことはありませんか?
- 1枚の図面のはずが、なぜかA4用紙4枚分にバラバラに分割されて出力される。
- 余白がやたらと広くなったり、図形の一部が次のページにはみ出したりする。
これは、Visioの「図面の大きさ(PageSetup)」と「出力する用紙のサイズ」の紐付けが曖昧になっているからです。これをVBAのコードでビシッと制御してあげるのが、今回のミッションです。
—
基礎知識:Visio VBAの心臓部「PageSetup」
Visioでページや用紙のレイアウトを司るオブジェクト、それが `PageSetup` です。
Visioの階層構造は、少しだけ特殊で、以下のようなピラミッドになっています。
Application (Visioアプリ全体)
└── Document (開いているファイル)
└── Page (個々の図面ページ)
└── PageSetup (★今回の主役:用紙サイズや向きの設定)
「どのページの」「PageSetup(用紙設定)をどうするか」を指定してあげるのが、Visio VBA自動化の基本中の基本になります。
—
実装コード:一発で用紙サイズに合わせる魔法のVBA
それでは、実際のコードを見てみましょう。
開発タブのVisual Basic Editorを開き、標準モジュールに以下のコードを貼り付けてみてください。現場でそのままコピペして使える実用的なコードです。
Sub FitPageToDrawingAsPDF()
Dim vsoPage As Visio.Page
Dim strPath As String
‘ 1. 現在アクティブなページを取得する
Set vsoPage = ActivePage
‘ 2. 【核心】ページサイズを図面上の図形にぴったり自動合わせする
With vsoPage.PageSetup
‘ 用紙サイズを「図面のサイズに合わせる(縮小・拡大なし)」に設定
.AutoSize = True
‘ 念のため、用紙の向きを自動判定させる(横長なら横、縦長なら縦)
‘ 0 = 縦 (visPrnOrientPortrait), 1 = 横 (visPrnOrientLandscape)
‘ AutoSizeがTrueの場合、Visioがよしなに判断してくれますが、
‘ 必要に応じて明示的に指定することも可能です。
End With
‘ 3. PDFの保存先パスを指定(ここではデスクトップに保存)
‘ ※環境に合わせてパスは適宜書き換えてください
strPath = CreateObject(“WScript.Shell”).SpecialFolders(“Desktop”) & “\Output_AutoFit.pdf”
‘ 4. PDFとしてエクスポートを実行
‘ 第1引数にファイルパスを指定するだけで、自動的に最適化されたPDFが生成されます
vsoPage.ExportAsFixedFormat visFixedFormatPDF, strPath, visRasterizeNone, visPrintAll
‘ 5. 完了メッセージ
MsgBox “PDFの出力が完了しました!” & vbCrLf & “保存先: ” & strPath, vbInformation, “処理成功”
End Sub
コードの解説:ここがポイント!
- `vsoPage.PageSetup.AutoSize = True`
これが今回の最も重要な魔法の呪文です。UI上でいう「ページサイズをdrawingに合わせる(Size to Drawing)」の操作をコード化したものです。これを有効にすることで、図形を描いた大きさに合わせてページ枠が自動で伸縮します。
- `vsoPage.ExportAsFixedFormat`
Visioの標準機能を使ってPDFを書き出すメソッドです。わざわざプリンタードライバを操作する必要がなく、非常に高速かつ安定してPDFを出力できます。
—
初学者が陥りやすい罠とエラー回避のコツ
Visio VBAを書き始めると、多くの人が次のような壁にぶつかります。ここを知っておくだけで、無駄なエラーに悩まされずに済みますよ。
1. 「オブジェクトが必要です」エラー (Run-time error ‘424’)
- 原因: `ActivePage` や `ActiveDocument` を使おうとした際、そもそもVisioでファイルが開かれていない、あるいは図面が選択されていない状態でコードを実行してしまった場合に起きます。
- 対策: コードの冒頭で `If ActiveDocument Is Nothing Then Exit Sub` などのガード節を入れる癖をつけましょう。
2. AutoSizeを入れたのにレイアウトが崩れる
- 原因: すでにグループ化された複雑な図形や、ページの外れ(マイナスの座標など)に小さなゴミ図形が残っていると、`AutoSize = True` がそのゴミも含めて計算してしまい、キャンバスが意図せず巨大化することがあります。
- 対策: PDF出力前には、不要なオブジェクトが残っていないか、座標が正しく配置されているかを整理することが綺麗なPDFを作るコツです。
—
おわりに
いかがでしたでしょうか?
「マクロの記録」では見えてこなかった `PageSetup` オブジェクトの操作と `AutoSize` のプロパティ。これらを理解すれば、もうバラバラに分割された悲惨なPDFに悩まされることはありません。
Visio VBAは、一度仕組みを理解してしまえば、日々の手作業を一瞬で終わらせてくれる最強の相棒になります。
「ここを自動化できるかも?」というワクワク感を大切に、ぜひあなたの業務にも取り入れてみてくださいね。応援しています!
