【入門編】図形の見た目を瞬時に変更:LineやFillプロパティを操作してアラート状態を色で視覚化する – Visio VBA解析バイブル

スポンサーリンク

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と連携させれば、「インフラの健康状態を視覚的に叩きつけるダッシュボード」を自動生成する最強の武器になります。

まずはこの小さな成功体験から始めてください。何かわからないことがあれば、またいつでも聞きに来てくださいね。あなたの自動化の旅を応援しています。

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