【入門編】Shape.AddRowを用いたConnection Points(接続点)の動的追加とカスタムコネクタ分岐 – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの深淵へ:接続点を動的に操り、図形を「自律進化」させる極意

こんにちは。自動化の荒波を乗り越えてきた皆さん、Visioの「ShapeSheet」という深淵を覗いたことはありますか?

マクロの記録で生成されるコードは、あくまで「通りすがりの足跡」に過ぎません。真の自動化エンジニアは、Visioの心臓部であるShapeSheetをVBAから直接操作し、図形に命を吹き込みます。

今回は、最も強力かつ実用的なテクニックの一つ「Connection Points(接続点)の動的追加」をマスターしましょう。これさえ理解すれば、あなたの描く図面は「配置されるのを待つだけの図形」から「自ら結線口を増やす自律的な部品」へと進化します。

1. なぜ「接続点」をコードで操作するのか?

通常、Visioで接続点を増やすには「接続ポイントツール」で手動クリックしますよね。しかし、数百のノードを扱うシステム構成図やフローチャートでそれをやるのは苦行です。

VBAでこれを制御すれば、「データの数に合わせて接続点を自動生成し、コネクタを自動的に吸着させる」といった、人間には不可能なレベルのレイアウト自動化が実現できます。

2. ShapeSheetの構造を理解する

Visioの図形は、内部に「ShapeSheet」というスプレッドシートを持っています。接続点はここに属する `Connection Points` というセクションに格納されます。

VBAでここを操作する際の要点は、以下の2つのメソッドです。

  • `Shape.AddRow`: 新しい行(接続点)を追加する。
  • `Shape.CellsSRC`: 特定のセクション・行・列の値を書き換える。

3. 実践コード:接続点を動的に追加する

以下のコードは、選択した図形の右端に、新しい接続点を追加し、そこに座標(X, Y)を割り当てる実用的なプロシージャです。

Sub AddDynamicConnectionPoint()
Dim shp As Visio.Shape
Dim rowIdx As Long

‘ 選択中の図形を取得(ガード条件:何も選択されていない場合は終了)
If Visio.ActiveWindow.Selection.Count = 0 Then Exit Sub
Set shp = Visio.ActiveWindow.Selection(1)

‘ 1. Connection Pointsセクションに行を追加
‘ visSectionConnectionPts: 接続点セクション
‘ visRowConnectionPts: 行のタイプ
‘ visTagDefault: 標準的な接続点タグ
rowIdx = shp.AddRow(visSectionConnectionPts, visRowConnectionPts, visTagDefault)

‘ 2. 座標を設定 (X = 0, Y = 0.5 の位置へ)
‘ 座標は図形の中心を原点とした相対値で指定します
shp.CellsSRC(visSectionConnectionPts, rowIdx, visX).FormulaU = “Width1” ‘ 右端
shp.CellsSRC(visSectionConnectionPts, rowIdx, visY).FormulaU = “Height0.5” ‘ 中央

Debug.Print “接続点 #” & rowIdx & ” を追加しました。”
End Sub

このコードの「極意」

  • `FormulaU`を使う理由: `Result`プロパティではなく`FormulaU`を使います。これにより、ユーザーが後で図形サイズを変えても、接続点が「Width1」という計算式に従って追従してくれます。これぞVisioの自動化における「賢い」実装です。

4. 陥りやすい罠と解決策

初学者が必ず突き当たる「壁」があります。

Q. 「コードを実行しても、接続点が見えません!」

A. 接続点の表示設定を確認してください。
コードで追加しても、Visioの表示設定でオフになっていると見えません。
`[表示]タブ > [視覚補助] > [接続ポイント]にチェック` を入れるか、以下のコードを仕込んで強制的に表示させてください。

ActiveWindow.ShowConnectionPoints = True

Q. 「エラー番号 -2032466938 が発生する」

A. オブジェクトの保護状態を確認してください。
Visioの図形(特にステンシルからドラッグしたマスタシェイプ)は、構造が保護されている場合があります。その場合は、一度 `Protection` セクションのロックを解除するか、グループ化を解除するなどの処理が必要になります。

5. 次のステップへ

接続点が生成できれば、次は `Shape.GlueTo` メソッドを使って、コネクタを特定の接続点に「強制的に吸着」させるステップに進めます。

ここをクリアすれば、あなたはもう「マクロの記録」に頼る初心者ではありません。Visioの内部構造を操る「アーキテクト」への第一歩を踏み出したのです。

何か不明点があれば、またいつでも聞いてください。Visio VBAの世界は奥が深く、そして非常に強力です。あなたの業務効率化が、ここから劇的に加速することを期待していますよ。

それでは、良いコーディングを!

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