Visio VBAを掌握する:図形を「生き物」に変える動的プロパティ操作の極意
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアとして、今日は「Visioをただのお絵かきソフトで終わらせない」ための、最も基本的かつ強力なテクニックを伝授します。
多くの人が「マクロの記録」で生成された長ったらしいコードに絶望し、挫折します。しかし、Visioのオブジェクトモデルの本質を理解すれば、たった数行で図形を「動く監視盤」に変えることができます。
今回は、「外部データのステータスに応じて図形の色と枠線を瞬時に変える」という、実務で最も重宝するスキルに絞って解説します。
—
1. Visioオブジェクトモデルの「階層構造」を理解する
コードを書く前に、Visioの世界観を把握しましょう。Visioは「入れ子構造」でできています。
1. Application: Visioというソフトそのもの。
2. Document: 開いているファイル(図面)。
3. Page: 図面のページ。
4. Shape: ページ上の図形。
「どのページの、どの図形を操作するか?」というパスを辿るのがVisio VBAの基本です。この階層を意識するだけで、エラーの9割は防げます。
—
2. 実践:ステータスに応じた「見た目」の動的変更
では、実際にコードを見てみましょう。ここでは「正常(緑・細枠)」と「異常(赤・太枠)」を切り替える関数を作成します。
‘ ———————————————————
‘ 指定したShapeの見た目をステータスに応じて変更する
‘ @param shp 操作対象のShapeオブジェクト
‘ @param isError 異常状態ならTrue, 正常ならFalse
‘ ———————————————————
Public Sub UpdateShapeStatus(shp As Visio.Shape, isError As Boolean)
‘ エラーハンドリング:万が一図形が保護されていても落ちないように
On Error Resume Next
If isError Then
‘ 異常状態:赤色、太枠
shp.Cells(“FillForegnd”).Formula = “RGB(255, 0, 0)” ‘ 塗りつぶし色
shp.Cells(“LineWeight”).Formula = “3 pt” ‘ 枠線の太さ
shp.Cells(“LineColor”).Formula = “RGB(200, 0, 0)” ‘ 枠線の色
Else
‘ 正常状態:緑色、標準枠
shp.Cells(“FillForegnd”).Formula = “RGB(0, 200, 0)”
shp.Cells(“LineWeight”).Formula = “1 pt”
shp.Cells(“LineColor”).Formula = “RGB(0, 100, 0)”
End If
On Error GoTo 0
End Sub
なぜ `Cells` プロパティを使うのか?
Visioの図形は、内部に膨大な「セル」を持っています。`FillForegnd`や`LineWeight`といった名前は、Visioの「シェイプシート(ShapeSheet)」という裏側のデータベースに直結しています。ここを叩くのが、Visio VBAで最も高速で、かつ「王道」とされる操作方法です。
—
3. 現場で「ハマる」ポイントと解決策
初学者が必ず突き当たる壁が2つあります。ここをクリアすれば、あなたはもう脱・初級者です。
① 図形が特定できない問題
「どの図形を操作すればいいの?」という問題です。現場では図形に名前(`Name`)を付けておくのが鉄則です。
- 対策: Visio画面上で図形を選択し、「開発」タブ > 「図形名」からユニークな名前をつけておきましょう。コード内では `ActivePage.Shapes(“サーバーA”)` のようにアクセスできます。
② 処理が重くなる問題
数百個の図形を一度にループで回すと、画面の再描画が走って猛烈に重くなります。
- 対策: 大量更新が必要な場合は、以下のコードを処理の前後に入れてください。
‘ 処理開始前
Application.ScreenUpdating = False
‘ …ここに更新処理を書く…
‘ 処理終了後
Application.ScreenUpdating = True
これだけで、描画エンジンへの負荷が激減し、処理速度が劇的に向上します。
—
4. さあ、あなたのアクションへ
このコードをコピーして、適当な四角形を描き、名前を「TargetShape」に変更してから、以下のテスト用プロシージャを走らせてみてください。
Sub TestRun()
Dim shp As Visio.Shape
Set shp = ActivePage.Shapes(“TargetShape”)
‘ 異常状態にしてみる
Call UpdateShapeStatus(shp, True)
End Sub
図形がパッと赤色に変わった瞬間、あなたは「Visioを制御した」ことになります。
Visio VBAは、ただの事務作業ツールではありません。外部の監視データやCSV、DBと連携させれば、「インフラの健康状態を視覚的に叩きつけるダッシュボード」を自動生成する最強の武器になります。
まずはこの小さな成功体験から始めてください。何かわからないことがあれば、またいつでも聞きに来てくださいね。あなたの自動化の旅を応援しています。
