Visio VBAを掌握せよ:テンプレートに基づく「ページ一括自動生成」の極意
こんにちは。Visioの世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの羅列に絶望したことはありませんか? VisioのVBAは、単なる自動化ツールではありません。「図面という空間を、コードで支配する建築術」なのです。
今回は、現場で最も重宝される「テンプレートに基づいたページの一括自動生成」を題材に、Visioのオブジェクトモデルを攻略していきましょう。ここを理解すれば、あなたのVisio運用は劇的に変わります。
—
1. Visioオブジェクトの「階層構造」を理解する
まず、Visioを操るための「地図」を頭に入れましょう。Visioは以下の階層で構成されています。
- Application: Visioそのもの
- Document: 1つのファイル
- Page: ドキュメント内の「シート」
- Shape: ページ上に置かれた「図形」
ページを自動生成するということは、「Document内のPagesコレクションに、新しいPageオブジェクトをAdd(追加)し、そのプロパティを書き換える」という行為に他なりません。
—
2. 実践:ページ一括生成プログラム
以下のコードは、ボタン一つで「表紙」「構成図」「詳細仕様」の3ページを、それぞれの設定(用紙方向や背景)と共に生成する実践的なスクリプトです。
Sub CreateStandardPages()
Dim doc As Visio.Document
Dim pg As Visio.Page
Set doc = ActiveDocument
‘ ページ作成のヒント:
‘ Visioでは追加したページが常に一番後ろに来るため、
‘ 順序を制御したい場合はループの考え方が重要になります。
‘ 1. 表紙ページの作成
Set pg = doc.Pages.Add
pg.Name = “01_表紙”
Call SetPageSetup(pg, visDocLandscape) ‘ 横向き設定
‘ 2. 構成図ページの作成
Set pg = doc.Pages.Add
pg.Name = “02_構成図”
Call SetPageSetup(pg, visDocPortrait) ‘ 縦向き設定
MsgBox “ページの一括生成が完了しました!”, vbInformation
End Sub
‘ ページ設定を共通化する関数(保守性を高める秘訣)
Sub SetPageSetup(ByRef pg As Visio.Page, orientation As Integer)
Dim pgSheet As Visio.Shape
Set pgSheet = pg.PageSheet
‘ 用紙方向の設定 (PageSheetのセルを直接叩くのがVisio流)
pgSheet.Cells(“PrintPageOrientation”).Formula = orientation
‘ 背景ページの設定例 (必要に応じて)
‘ pg.BackPage = doc.Pages(“Background_A”)
End Sub
—
3. なぜ「PageSheet」を操作するのか?
初心者がもっとも躓くポイント、それは「なぜ `pg.Orientation` みたいなプロパティがないのか?」という点です。
Visioの深淵では、すべての設定は「ShapeSheet(シェイプシート)」と呼ばれる内部テーブルによって管理されています。ページも実は「PageSheet」という特別なシェイプとして定義されています。
- `pg.PageSheet.Cells(“セル名”)`
- この記述こそが、Visioの心臓部に直接命令を送るための「聖域」への入り口です。ここを叩けるようになれば、あなたはもう初心者ではありません。
—
4. 陥りやすい罠と解決策
① 名前重複エラー
`pg.Name = “01_表紙”` とした際、すでに同じ名前のページがあるとエラーで止まります。
対策: 名前を付ける前に、既存の同名ページがないか確認する `If` 文を挟むのがプロの流儀です。
② 処理速度の低下
ページを大量に作成すると、画面の再描画が走って処理が重くなります。
対策: コードの冒頭に `Application.ScreenUpdating = False` を入れ、最後に `True` に戻しましょう。これだけで実行速度は数倍変わります。
—
5. 最後に:エンジニアとしての一歩先へ
今回学んだ「ページ生成」は、単なる作業短縮ではありません。「誰が作っても同じ品質のドキュメントを、ミスなく出力する」ための仕組み作りです。
Visio VBAは、複雑な図面をプログラムで制御できる世界で数少ないツールです。まずはこのコードをコピペして、`Cells(“…”)` の中のパラメータを変えてみてください。「自分の命令で図面が動く」感覚を掴めれば、あとは応用するだけです。
次は「ページ内の図形をデータベースから一括配置する」ことに挑戦してみましょうか?
あなたの開発ライフが、Visioとともに豊かになることを願っています。
さあ、エディタを開いて、最初の1行を書き始めましょう!
