Visioを「生きたダッシュボード」に変える:VBAで図形の見た目を自在に操る極意
こんにちは。現場で泥臭い自動化を積み重ねてきたエンジニアなら、一度は思うはずです。
「この図形、今のステータスをそのまま色で表現できたら、どれほど楽だろうか」と。
Visioは単なる作図ソフトではありません。データと図形が直結した、強力な可視化エンジンです。今回は、マクロの記録という「おままごと」を卒業し、Visio VBAの心臓部であるオブジェクトモデルを操作して、図形を動的に制御する技術を伝授します。
—
1. Visioオブジェクトモデルの地図を持つ
まず、Visio VBAを触る上で避けて通れない「階層構造」を理解しましょう。
- Application: Visioそのもの。全ての根源。
- Document: 開いている図面ファイル。
- Page: 今見ているページ。
- Shape: 画面上の図形。ここが今回の主戦場です。
コードを書くとき、私たちは常に「今どのShape(図形)を触っているのか?」を意識しなければなりません。「マクロの記録」は便利ですが、あれは`Selection`(選択範囲)に依存しすぎるため、実務では使い物になりません。「狙った図形をIDで特定する」ことこそが、自動化の第一歩です。
—
2. 実践:ステータスに応じた色変更ロジック
「処理中(青)」「完了(緑)」「エラー(赤)」という3つの状態を、図形の見た目に反映させるプロシージャを作成しましょう。
現場で使うべきプログラミングコード
‘ 指定したShapeの色をステータスに応じて変更する汎用プロシージャ
Public Sub UpdateShapeStatus(shp As Visio.Shape, status As String)
‘ 0. オブジェクトの安全確認
If shp Is Nothing Then Exit Sub
‘ 1. セル(Cell)へのアクセス
‘ Visioでは見た目の設定を「Cell」というプロパティで管理します
‘ LinePatternやFillForegndが色を司ります
Select Case status
Case “Progress”
‘ 処理中:青系統
shp.Cells(“FillForegnd”).Formula = “RGB(100, 149, 237)”
shp.Cells(“LineColor”).Formula = “RGB(0, 0, 139)”
Case “Done”
‘ 完了:緑系統
shp.Cells(“FillForegnd”).Formula = “RGB(144, 238, 144)”
shp.Cells(“LineColor”).Formula = “RGB(0, 100, 0)”
Case “Error”
‘ エラー:赤系統
shp.Cells(“FillForegnd”).Formula = “RGB(255, 99, 71)”
shp.Cells(“LineColor”).Formula = “RGB(139, 0, 0)”
Case Else
‘ デフォルト(標準色)
shp.Cells(“FillForegnd”).Formula = “RGB(255, 255, 255)”
End Select
End Sub
—
3. なぜ「Cells」を操作するのか?(本質解説)
初学者が最も躓くのが、`.Interior.Color`(Excel VBAの書き方)で色を変えようとしてエラーになることです。
Visioの世界では、図形のプロパティはすべて「ShapeSheet(シェイプシート)」というデータベースに格納されています。`shp.Cells(“FillForegnd”)` と記述するのは、「シェイプシートの『塗りつぶしの前景色』というセルを書き換える」という行為です。
- ポイント: ここで指定する値は`Formula`(数式)として渡します。そのため、`”RGB(R, G, B)”` という文字列で指定するのがVisio流の鉄則です。
—
4. 陥りやすい罠と解決策
① 図形が保護されていて色が変わらない
図形によっては、「ロック」がかかっており、プログラムから色を変更できない場合があります。その際は、事前に `shp.LockFormat = False` とするか、シェイプシートの保護設定を確認してください。
② 処理が重い、画面がチラつく
大量の図形をループで回す際、毎回画面を更新するとパフォーマンスが劇的に低下します。
以下のコードで、処理中の画面描画を止めるのがプロの作法です。
Application.ScreenUpdating = False
‘ …ここにループ処理…
Application.ScreenUpdating = True
—
さあ、次は君の番だ
今回紹介した `UpdateShapeStatus` は、単なる色変えコードではありません。例えば、外部データベースやExcelから読み込んだ進捗状況を、このプロシージャに流し込むだけで、「更新ボタンを押すと、プロジェクトの全タスクが自動で信号機のように色づくダッシュボード」が完成します。
Visio VBAは、一度仕組みを作れば、二度と手作業で色を変える必要がなくなる「自動化の魔法」です。まずは、目の前にある図形の色をコードから変える体験をしてみてください。その一歩が、あなたの業務効率を劇的に変えるはずです。
何か詰まったら、いつでも聞いてください。コードは嘘をつきませんよ。
