【入門編】Shape.CellsUを用いたデータ付与:カスタムプロパティ(シェイプデータ)の読み書き自動化 – Visio VBA解析バイブル

スポンサーリンク

Visio VBAで「図形に命を吹き込む」:シェイプデータ操作の極意

こんにちは。現場で泥臭く自動化を積み重ねてきたエンジニアです。

Visioをただの「お絵描きツール」だと思っていませんか? もしそうなら、非常にもったいない。Visioの真価は、「図形の中にデータベースを隠し持てること」にあります。

今回は、Visio VBAの登竜門であり、業務効率化の要である「シェイプデータ(旧カスタムプロパティ)」の読み書きをマスターしましょう。これさえ押さえれば、数百個の図形に一瞬で管理番号を割り振るような魔法のようなツールが作れるようになりますよ。

1. Visioオブジェクトモデルの地図を持つ

コードを書く前に、Visioがどういう階層構造で世界を捉えているかを知る必要があります。

  • Application: Visioそのもの。
  • Document: 開いているファイル。
  • Page: 図面内のページ。
  • Shape: 図形。ここが今回の主戦場です。

この階層を降りていき、目当ての`Shape`に辿り着く。これがVBAの基本ルートです。

2. シェイプデータへのアクセス:CellsUの「呪文」

シェイプデータにアクセスするには、`Shape.CellsU`というメソッドを使います。ここで重要なのは、「Visioの内部名(ユニバーサル名)」と「表示名」を混同しないことです。

基本的な書き込みコード

Sub UpdateShapeData()
Dim shp As Visio.Shape
Dim doc As Visio.Document

‘ アクティブなページから対象のシェイプを取得(ここでは選択中の図形とする)
Set shp = ActiveWindow.Selection(1)

‘ シェイプデータの格納場所は “Prop.項目名” という形式
‘ CellsUを使うのが鉄則です(言語環境に依存しないため)

‘ 既存のプロパティに値を代入
‘ “Prop.PartNumber” はシェイプシート上の名前
shp.CellsU(“Prop.PartNumber”).FormulaU = Chr(34) & “A-12345” & Chr(34)

‘ 担当者名も更新
shp.CellsU(“Prop.Owner”).FormulaU = Chr(34) & “山田 太郎” & Chr(34)

MsgBox “データの書き込みが完了しました。”
End Sub

なぜ `Chr(34)` を使うのか?

Visioのセルは、基本が「数式」として扱われます。そのため、文字列を代入するときはダブルクォーテーションで囲む必要があります。`Chr(34)`はそのダブルクォーテーションをコード内で安全に扱うためのテクニックです。

3. 初学者が必ずハマる「罠」と解決策

罠1:プロパティが存在しないエラー

コードを実行した際、「指定されたセルが見つかりません」というエラーが出ることがあります。これは、ターゲットの図形にそのシェイプデータ定義が含まれていないからです。

解決策:`CellExistsU`を使う
値を書き込む前に、そのセルが存在するか確認する防護壁を作りましょう。

If shp.CellExistsU(“Prop.PartNumber”, False) Then
shp.CellsU(“Prop.PartNumber”).FormulaU = Chr(34) & “NewValue” & Chr(34)
Else
Debug.Print “この図形にはプロパティが定義されていません”
End If

罠2:値が反映されない(再計算の壁)

稀に、コードで値を書き換えても画面上の表示が即座に変わらないことがあります。その場合は `Application.AlertResponse` を適切に設定するか、必要に応じて `shp.CellsU(“Prop.PartNumber”).FormulaForceU` を使うのがプロのやり方です。

4. 現場で使える「一括更新」の極意

ここからが本題です。選択した図形すべてに対して一括で処理を行うパターンです。

Sub BatchUpdateShapeData()
Dim shp As Visio.Shape

‘ 選択されている図形をすべてループ処理する
For Each shp In ActiveWindow.Selection
‘ セルが存在するか確認し、あれば書き込む
If shp.CellExistsU(“Prop.Owner”, False) Then
shp.CellsU(“Prop.Owner”).FormulaU = Chr(34) & “エンジニアチーム” & Chr(34)
End If
Next shp

MsgBox “一括更新完了!”
End Sub

最後に:先輩からのアドバイス

Visio VBAをマスターするコツは、「まずは手動でやりたい操作をマクロの記録で追いかけること」です。

ただし、マクロの記録は「冗長で遅いコード」を吐き出しがちです。今回紹介した `CellsU` によるダイレクトなアクセス方法は、処理速度も速く、堅牢なシステムを作るための「プロの第一歩」です。

今日からあなたのVisioは、ただの作図ソフトではなく、「データが躍動するインテリジェントな管理ツール」へと進化しました。エラーを恐れず、どんどんコードを書いてみてください。壁にぶつかった時こそ、エンジニアとしての血肉になる経験が積める時ですから。

何か詰まったら、いつでも戻ってきてくださいね。応援しています!

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