【入門編】マスターシェイプの活用:Document.Mastersからステンシル内の図形をドキュメント上に実体化する – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの真髄:マスターシェイプを「召喚」し、自動作図の支配者になる

こんにちは。業務自動化の世界へようこそ。
「マクロの記録」ボタンを押して、生成されたコードの長さに絶望したことはありませんか? Visioの記録機能は、残念ながら「作業のなぞり」しかしてくれません。

真の自動化エンジニアは、Visioの「オブジェクトモデル」という骨格を理解し、プログラムから直接図形に命を吹き込みます。今回は、その第一歩にして最大の武器である「マスターシェイプの実体化(Dropメソッド)」について解説します。

1. なぜ「Drop」を使うのか?

Visioの図面(Page)上に図形を配置する方法はいくつかありますが、最も「正しく」「効率的」なのが `Page.Drop` メソッドです。

  • なぜ重要か?:マスターシェイプは「設計図」です。そこから `Drop` することで、Visioは自動的に接続ポイントの管理やデータの継承を行ってくれます。これをコピー&ペーストで済ませようとすると、図形のID管理が破綻し、後のデータ連携で必ず泣きを見ることになります。

2. 鋼鉄のコード:マスターシェイプ配置のテンプレート

まずは、このコードを眺めてみてください。これがVisio VBAの標準的な「召喚の儀式」です。

Sub DropShapeFromStencil()
‘ 変数の宣言:オブジェクトへの参照を保持する
Dim vsoPage As Visio.Page
Dim vsoMaster As Visio.Master
Dim vsoShape As Visio.Shape

‘ 現在のアクティブなページを取得
Set vsoPage = ActivePage

‘ 「基本フローチャート」ステンシル内の「プロセス」というマスターを取得
‘ ポイント:Document.Masters(“名前”) でアクセスする
Set vsoMaster = Application.Documents(“BASIC_M.VSSX”).Masters(“プロセス”)

‘ ページ上の座標(2, 5)インチの位置にドロップ
‘ Dropメソッドは、生成されたShapeオブジェクトを返す
Set vsoShape = vsoPage.Drop(vsoMaster, 2#, 5#)

‘ 配置後の微調整(必要であれば)
vsoShape.Text = “自動生成されたプロセス”

Debug.Print “図形ID: ” & vsoShape.ID & ” を生成しました。”
End Sub

コードの深層解説

1. Documents(“ファイル名”): ステンシルが既に開かれている必要があります。開いていない場合は `Documents.OpenEx` で読み込む処理を前段に挟むのがプロの流儀です。
2. Masters(“マスター名”): ステンシル内にある図形名です。Visioの画面上で名前を確認してください。
3. Drop(Source, x, y): 魔法のメソッドです。引数には「何を」「どこに(X座標, Y座標)」配置するかを指定します。単位はVisio内部形式(インチ)であることに注意してください。

3. 初学者が必ずハマる「3つの落とし穴」

多くの人がここで挫折します。事前に知っておけば怖くありません。

① ステンシルが開かれていない

コードで `Documents(“XXX.vssx”)` を指定しても、そのステンシルがVisio上で開かれていなければエラーになります。
対策: コードの冒頭で `Application.Documents.OpenEx` を使い、読み込み確認を行うルーチンを組み込みましょう。

② マスター名の不一致

「プロセス」という名前でも、内部的には異なる場合があります。
解決策: イミディエイトウィンドウで `?ActiveDocument.Masters(1).Name` と打って、正しい名前を確認する癖をつけましょう。

③ 座標系(インチ)の罠

VisioのVBAは、表示単位(mmやcm)に関わらず、内部的には「インチ」で計算します。
「10cmの位置に置きたい」場合は `10 / 25.4` と変換する計算式を忘れないでください。

4. 次のステップへ:自動化エンジニアとしての心得

ここをクリアしたあなたは、もう「マクロの記録」に頼る必要はありません。
次は、以下のようなステップアップを目指してください。

  • ループ処理: `For Each` を使って、Excelのリストから100個の図形を一瞬で配置する。
  • コネクタ接続: `GlueTo` メソッドを使い、配置した図形同士を自動的に線で結ぶ。
  • ShapeDataの操作: `vsoShape.Cells(“Prop.Cost”).Formula` で、図形にコストや担当者などの情報を流し込む。

Visioは単なる作図ソフトではなく、「データを持つオブジェクトの集合体」です。この構造さえ掴めば、あなたの業務効率は劇的に向上します。

「ここをクリアすれば、Visio VBAの基本はバッチリですよ」。
次は、どんな図形を自動で並べてみましょうか? 応援しています。

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