【入門編】Document.Statsおよびプロパティ監査:ファイル内の全シェイプ数・ページ数・未使用マスターを一括抽出するレポート作成ツール – Visio VBA解析バイブル

スポンサーリンク

Visioを「解剖」する:ドキュメント健全性を一括査察するVBAアーキテクチャ

こんにちは。業務自動化の深淵へようこそ。
多くのユーザーが「マクロの記録」でVisioを操作しようとして挫折する理由は一つ。Visioという巨大なオブジェクトモデルの「階層構造」を理解せずに、表面だけをなぞっているからです。

今日は、あなたの手元にある重たいVisioファイルが「なぜ重いのか」、その正体を暴き、ファイルの状態を可視化する「ドキュメント監査ツール」を一緒に作っていきましょう。ここをマスターすれば、あなたはもう初心者ではありません。

1. Visioのオブジェクトモデルを俯瞰する

Visioの構造は、ロシアのマトリョーシカのように階層的です。まずはこの地図を頭に叩き込んでください。

  • Application: Visioそのもの。全ての親。
  • Document: ファイル単位。ここがデータの保管庫。
  • Page: 図面上のページ。
  • Shape: 図形。これがVisioの最小かつ最強の構成要素。

「マクロの記録」は単に `ActiveWindow.Selection` を叩くだけですが、真のエンジニアは `Document` オブジェクトから下層へ潜り込み、全シェイプをスキャンします。

2. ファイルを解剖する:監査ツール実装コード

このスクリプトは、ドキュメント内の総シェイプ数、ページ数、そして「ゴミ」となっている未使用マスターシェイプを抽出し、イミディエイトウィンドウにレポートを出力します。

Option Explicit

‘ — Visioドキュメント監査ツール —
‘ 目的:ファイル内の構造的負債を可視化し、軽量化の指針を得る
Sub AuditVisioDocument()
Dim doc As Visio.Document
Dim pg As Visio.Page
Dim shp As Visio.Shape
Dim master As Visio.Master
Dim shapeCount As Long

Set doc = ActiveDocument

Debug.Print “=== Visio ドキュメント監査レポート ===”
Debug.Print “ファイル名: ” & doc.Name
Debug.Print “ページ総数: ” & doc.Pages.Count

‘ 1. 全ページ・全シェイプのカウント
shapeCount = 0
For Each pg In doc.Pages
shapeCount = shapeCount + pg.Shapes.Count
Next pg
Debug.Print “シェイプ総数: ” & shapeCount

‘ 2. 未使用マスターシェイプの検出
‘ 未使用のマスターはファイルサイズを肥大化させる最大要因の一つ
Debug.Print “— 未使用マスターシェイプ —”
Dim unusedCount As Integer: unusedCount = 0

For Each master In doc.Masters
‘ InUseプロパティがFalseなら、図面上に存在しないことを意味する
If Not master.InUse Then
Debug.Print “未使用: ” & master.Name
unusedCount = unusedCount + 1
End If
Next master

Debug.Print “未使用マスター数: ” & unusedCount
Debug.Print “================================”

MsgBox “監査完了。イミディエイトウィンドウ(Ctrl+G)を確認してください。”
End Sub

3. ここで躓くな:エンジニアの心得

① `InUse` プロパティの罠

コード内で `master.InUse` を使いました。これは「このマスターが図面にドラッグされているか」を判定する非常に強力なプロパティです。しかし、注意点があります。「グループ化された図形の中に潜んでいる」場合、Visioはそれを「使用中」と判定します。完全に削除して良いかどうかは、必ず一度手動で確認してから実行する習慣をつけましょう。

② パフォーマンスの重み

Visioのオブジェクトをループで回す際、シェイプ数が数千を超えると処理が極端に重くなります。

  • 回避策: ループ内で `DoEvents` を入れる、あるいは `Application.ScreenUpdating = False` を利用して画面描画を停止させることで、体感速度を劇的に向上させることが可能です。

③ 隠れたシェイプレイヤー

Visioには「非表示レイヤー」が存在します。目に見えないからといって存在しないわけではありません。もし `Shapes.Count` が異常に多い場合、レイヤー設定で「非表示」になっているシェイプが大量に埋もれている可能性があります。監査ツールを拡張する際は、`Shape.Layer` プロパティまで踏み込むと、さらに深い分析が可能になります。

4. まとめ:次のステップへ

今回作成したコードは、単なる「カウントツール」ですが、これを応用して「特定のレイヤーにあるシェイプを削除する」「全シェイプの保護設定を解除する」といった高度な自動化へ繋げていくことができます。

Visio VBAは、ただの「お絵かきソフトの自動化」ではありません。「図面というデータベースを操作する技術」です。

まずはこのコードを動かし、ご自身のファイルがどれだけの「見えない資産(または負債)」を抱えているか確認してみてください。それが、あなたのVisioエンジニアリングの第一歩です。

何か不明点があれば、またいつでも聞いてください。一緒に最高の自動化環境を作り上げましょう。

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