【入門編】Shapeオブジェクトの基礎:IDとNameプロパティの違いを理解して狙った図形を確実につかむ – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの深淵へようこそ:Shapeオブジェクトを「確実に」射抜くためのIDとNameの極意

Visio VBAの世界へようこそ。マクロの記録ボタンを押して生成されたコードを眺め、「なぜか動いたり動かなかったりする……」と頭を抱えたことはありませんか?

その原因の9割は、「Visioが図形をどう識別しているか」という本質を誤解していることにあります。今日は、Visio自動化の第一歩にして最大の壁、「Shapeオブジェクトの識別」について、伝説的エンジニアの視点から解き明かしていきましょう。

1. なぜ「狙った図形」が掴めないのか?

VBAで特定の図形を操作したいとき、私たちはつい `ActivePage.Shapes(“プロセス”)` のように名前で指定したくなります。しかし、これが地獄の入り口です。

Visioには、図形を識別するための「2つの顔」があります。

① ID(Shape.ID)

  • 正体: ページ内で一意に割り振られる「背番号」。
  • 特徴: 絶対に重複しない。ページ内での処理速度が最も速い。
  • 弱点: 図形をコピー&ペーストしたり削除したりすると、あっさり変わる。

② Name(Shape.Name)

  • 正体: UI上のラベルや、ユーザーが自由に付けた「名前」。
  • 特徴: 人間が見て分かりやすい。
  • 弱点: 重複する可能性がある。 また、ユーザーが図形をコピペすると「プロセス.1」「プロセス.2」のように自動でサフィックスが付与され、指定した名前が変わってしまう。

「名前で指定したはずなのに、エラーになる」
この原因は、ほとんどの場合「コピペで名前が変わった」か「同名の図形が複数存在してVisioが迷子になった」かのどちらかです。

2. 実践:IDとNameを使い分ける「鉄壁のコード」

現場で生き残るプロは、状況に応じてこの2つを使い分けます。以下のコードを読んでみてください。

ケースA:IDで高速にアクセスする(確実な処理)

動的に生成された図形や、特定のIDを保持している場合は、ID指定が最強です。

Sub GetShapeByID()
Dim shp As Visio.Shape
‘ ID番号は Integer型。ページ内の図形を瞬時に射抜く
Set shp = ActivePage.Shapes.ItemFromID(1)

‘ 存在確認は必須。IDが変わっている可能性を常に疑う
If Not shp Is Nothing Then
shp.Cells(“FillForegnd”).Formula = “RGB(255,0,0)”
End If
End Sub

ケースB:Nameでループして探す(柔軟な処理)

「『承認』という名前の図形を全部見つけて色を変えたい」といったケースでは、IDは使えません。このときはループ処理で「名前の頭文字」をチェックするのが定石です。

Sub FindShapesByName()
Dim shp As Visio.Shape
Dim targetName As String: targetName = “承認”

‘ ページ内の全図形をスキャンする
For Each shp In ActivePage.Shapes
‘ 名前の一部に「承認」が含まれているか判定
‘ .NameU を使うと、言語設定に依存せず英語名で判定できるため、より堅牢!
If InStr(shp.NameU, targetName) > 0 Then
shp.Cells(“LineWeight”).Formula = “3 pt”
End If
Next shp
End Sub

3. プロの知恵:NameUプロパティを愛せ

ここでもう一つ、現場で差がつくテクニックを授けましょう。
Visioには `Name` と `NameU` という2つの名前プロパティがあります。

  • Name: 実行環境の言語設定(日本語版Visioなら日本語)に依存する。
  • NameU: 常に英語のユニバーサル名を返す。

もし、あなたが作ったツールを海外拠点でも使わせたいなら、必ず `NameU` を使ってください。`Name` を使ってしまうと、日本語版の「プロセス」という名前を、英語版Visioでは認識できずにバグります。「ユニバーサル名で書く」のは、グローバルな開発現場での最低限のマナーです。

まとめ:今日から意識すべきこと

1. ID指定は「速い」が「脆い」: ページ構成が変わらない定型処理で使え。
2. Name指定は「直感的」だが「重複リスクがある」: 必ずループ処理で探索せよ。
3. NameUを使え: 言語環境に左右されない、プロフェッショナルなコードを書け。

Visioの図形は、単なる「四角」や「丸」ではありません。それは、あなたが定義するデータ構造の断片です。IDとNameという「背番号」と「名前」を正しく扱うことで、あなたのマクロは、エラーを吐かない「堅牢なエンジン」へと進化します。

さあ、次はどの図形を自在に操りましょうか? 分からないことがあれば、いつでもまた聞きに来てくださいね。あなたの自動化の旅を、全力でサポートします。

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