【入門編】独自パレットの自動生成:Document.Colorsコレクションを操作した社内標準カラーの一括適用 – Visio VBA解析バイブル

スポンサーリンク

Visio VBAを掌握する:コーポレートカラーの「自動パレット」でデザインを標準化せよ

こんにちは。業務自動化の世界へようこそ。
マクロの記録ボタンを押して、生成された無駄なコードの海に溺れる日々は今日で終わりにしましょう。

Visioは単なる「図を描くツール」ではありません。その本質は「図形というオブジェクトを、コードで精密に制御するデータベース」です。今日は、その第一歩として「ドキュメントのカラーパレットを支配し、社内標準デザインを一瞬で適用する」という、実務直結のテクニックを伝授します。

1. Visioオブジェクトモデルの「階層」を理解する

コードを書く前に、Visioの頭の中を覗いてみましょう。Visioのオブジェクトは、マトリョーシカのような階層構造になっています。

  • Application: Visioそのもの(親玉)
  • Document: 開いているファイル(ここがパレットの管理場所)
  • Page: 図面シート
  • Shape: 個々の図形

今回操作するのは、Document.Colorsコレクションです。ここに色を登録することで、そのファイル内でいつでも「あの会社指定の青」を呼び出せるようになります。

2. 実装:コーポレートカラーをパレットにねじ込む

まずは、現在のドキュメントに新しい色を登録する関数です。
既存のカラーインデックスを汚染しないよう、空いているスロットを探して色を割り当てるのがプロの流儀です。

Sub AddCorporateColor()
Dim doc As Visio.Document
Dim colors As Visio.Colors
Dim col As Visio.Color

Set doc = ActiveDocument
Set colors = doc.Colors

‘ 既存パレットの末尾に新しい色を追加
‘ RGB(R, G, B)で色を指定します(例:弊社のコーポレートブルー)
Set col = colors.Add
col.RGB = RGB(0, 51, 102)

‘ 名前を付けておくと後で管理が楽になります
col.Name = “CorporateBlue”

MsgBox “パレットに ” & col.Name & ” を追加しました!”
End Sub

【ここがポイント】なぜわざわざパレットに追加するのか?

RGB値をその都度指定するのではなく、パレットに登録する理由は「保守性」です。
将来的にコーポレートカラーが変更された場合、パレットの色を書き換えるだけで、ドキュメント内のすべての図形の色を一括更新できるからです。これが「自動化を愛する者の美学」です。

3. 応用:ドキュメント内の全図形を一括塗りつぶし

パレットに色を登録したら、次はページ内の図形をその色で塗りつぶしてみましょう。
ここで重要なのは、「図形が塗りつぶし可能か?」という属性チェックです。これを行わないと、線だけの図形やグループ化された図形でエラーが頻発します。

Sub ApplyCorporateColorToAllShapes()
Dim pg As Visio.Page
Dim shp As Visio.Shape

Set pg = ActivePage

‘ ページ内のすべての図形をループする
For Each shp In pg.Shapes
‘ 塗りつぶし属性を持っているかチェックしてから適用
‘ これを怠るとエラーでプログラムが止まります
If shp.CellExists(“FillForegnd”, visExistsAnywhere) Then
‘ パレットの「CorporateBlue」を指定
‘ インデックス番号ではなく名前で指定するのが安全
shp.Cells(“FillForegnd”).Formula = “RGB(0, 51, 102)”
End If
Next shp

MsgBox “全図形への適用が完了しました。”
End Sub

4. 初学者が陥りやすい「罠」と解決策

罠1:「オブジェクトが存在しません」エラー

Visioの図形は、階層の深さによってアクセス方法が変わります。グループ化された図形(Shapeの中にShapeがある状態)に対して上のコードを実行しても、中身までは変わりません。
解決策: 再帰処理(関数の中で自分自身を呼び出すテクニック)を学びましょう。これが書けるようになれば、あなたはもう脱・初級者です。

罠2:色の指定を「RGB」で直書きしてしまう

コード内に `RGB(0, 51, 102)` を散りばめると、後で管理不能になります。
解決策: 公共の定数(Const)として定義するか、先ほど作ったパレットのインデックス番号を変数に入れて使い回してください。

最後に:自動化の先にあるもの

今回紹介したコードは、あくまで「パレットを操作する」という基礎の基礎です。しかし、この「オブジェクトモデルの階層を理解し、属性を制御する」という視点があれば、どんな複雑なVisioの自動化も攻略可能です。

Visio VBAは、ただ楽をするための道具ではありません。「標準化された美しい図面を、一瞬で作り上げる」ための職人の鑿(のみ)です。

まずはこのコードをコピペして、あなたのVisioで動かしてみてください。画面上の色がパッと変わった瞬間、あなたはもう自動化エンジニアの入り口に立っています。

次回の記事では、「図形のデータ(ShapeData)とExcelを連携させ、図面から自動で見積もりを算出する」という、さらに踏み込んだ技術を解説します。楽しみにしていてくださいね。

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