【入門編】図形の変形・削除を安全に保護する:Shape.Lock系セル(LockWidth/LockDelete等)の一括制御VBAマクロ – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの深淵へ:図形を「鉄壁」にするShapeSheet操作の極意

こんにちは。自動化の現場でVisioと格闘し続けてきた諸君。
「一生懸命レイアウトした図形が、ちょっとした操作でズレてしまった」「間違えて大事な図形を削除してしまった」……そんな経験はないだろうか?

マクロの記録で生成されるコードは確かに便利だが、それだけではVisioの「魂」であるShapeSheet(シェイプシート)を操ることはできない。今日は、Visioのオブジェクトモデルを支配し、図形を意図せぬ編集から守る「Lock(ロック)」の制御術を伝授しよう。

これをマスターすれば、君の作成する図面はただの絵から、堅牢なシステムへと進化する。

1. なぜ「ShapeSheet」を直接叩くのか?

Visioの図形は、内部的に「ShapeSheet」というデータベースを持っている。高さや幅、回転角、そして今回扱う「保護属性(Lock系)」もすべてここに格納されているんだ。

VBAでこれらを制御するには、`Shape.CellsU` というメソッドを使う。これは「特定のセルの値を直接書き換える」ための魔法の杖だ。

覚えておくべき主要なLock系セル

  • LockWidth: 幅の変更を禁止
  • LockHeight: 高さの変更を禁止
  • LockDelete: 図形の削除を禁止
  • LockMoveX / LockMoveY: 位置の移動を禁止

これらを自在に操ることで、図面の「編集許可エリア」と「固定エリア」を明確に分離できる。これがプロの図面設計というものだ。

2. 図形を保護する魔法のコード

まずは、選択中の図形を一括で保護するコードを見てほしい。このコードは、現場のエンジニアが最も頻繁に使う「実戦配備型」だ。

‘ 選択した図形をガチガチに保護するプロシージャ
Public Sub LockSelectedShapes()
Dim shp As Visio.Shape

‘ エラー回避:選択範囲が空の場合に備える
If ActiveWindow.Selection.Count = 0 Then
MsgBox “図形を選択してから実行してください。”, vbExclamation
Exit Sub
End If

‘ 選択したすべての図形に対して反復処理を行う
For Each shp In ActiveWindow.Selection
‘ セル値の更新 (1でON, 0でOFF)
‘ CellsUはユニバーサル名(英語名)で指定するのが鉄則。
‘ ローカル言語設定に依存しない堅牢なコードになるからだ。

shp.CellsU(“LockWidth”).FormulaU = 1
shp.CellsU(“LockHeight”).FormulaU = 1
shp.CellsU(“LockDelete”).FormulaU = 1
shp.CellsU(“LockMoveX”).FormulaU = 1
shp.CellsU(“LockMoveY”).FormulaU = 1
Next shp

MsgBox “図形の保護設定が完了しました。”
End Sub

3. このコードを理解するための「エンジニアの視点」

コードをただコピペするだけでなく、以下の3点に注意してほしい。これが「マクロ記録」と「自作コード」の決定的な違いだ。

① FormulaU を使う理由

`Cells(“LockWidth”).ResultIU` ではなく、`CellsU(“LockWidth”).FormulaU` を使っている点に注目してほしい。

  • ResultIU: 値(数値)を扱う。
  • FormulaU: 「数式(文字列)」を扱う。

保護属性は「1(TRUE)」か「0(FALSE)」という数式を放り込むのが最も確実だ。`.FormulaU` はVisioの内部構造に直接語りかける手段であり、非常に安定している。

② 実行時のエラーハンドリング

現実の現場では、グループ化された図形の中に「保護を許可しない特殊なシェイプ」が混ざっていることがある。そんな時、上のコードをそのまま回すと「そのセルは存在しません」とエラーで停止してしまう。
本格的な自動化ツールを作るなら、`On Error Resume Next` を使うか、特定のシェイプタイプを判別する条件分岐を加えるのが、君たちを一段上のエンジニアにするはずだ。

4. まとめ:君の図面を「守る」力

今回紹介したLock系の制御は、Visio自動化における「守りの要」だ。

  • LockWidth/Height: レイアウトの崩壊を防ぐ。
  • LockDelete: 誤操作による消失を防ぐ。

これらを組み合わせることで、君が作った図面は、誰が触っても壊れない「堅牢なドキュメント」へと生まれ変わる。

「コードを書く」ということは、Visioに君の意図を伝えることだ。
さあ、このコードを使って、自由自在に図形を支配してほしい。ここをクリアした君なら、次はページ全体のレイアウト保護や、メタデータの一括更新といった、より高度な領域へ進めるはずだ。

次はどんな自動化に挑戦する? 準備ができたら、またここへ来るといい。待っているよ。

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