Visioファイルから「見えない情報」を完全に消し去る:Document.RemoveCustomInformationの真髄
こんにちは。業務自動化の深淵へようこそ。
Visioは非常に強力なツールですが、その裏側には「Document Properties(ドキュメントのプロパティ)」や「Custom Properties(シェイプデータ)」という名の、いわばファイルの履歴書が刻まれています。
社外に図面を提出する際、作成者名、編集時間、あるいは過去に削除したはずのデータの残骸が残っていることに気づいていますか?これらはセキュリティ上のリスクであるだけでなく、ファイルサイズを肥大化させる原因にもなります。
今回は、Visio VBAの奥義である `Document.RemoveCustomInformation` を用いて、ファイルを「クリーン」にする手法を伝授します。マクロの記録から一歩踏み出し、オブジェクトのライフサイクルを制御するエンジニアの視点を手に入れましょう。
—
1. Visioのオブジェクトモデルを俯瞰する
コードを書く前に、Visioの「階層構造」を理解しましょう。これは自動化の基礎体力です。
- Application: Visioというソフトそのもの。
- Document: 開いているファイル全体。
- Page: ファイルの中の各シート。
- Shape: 図形。すべてのデータの終着点。
今回扱う `RemoveCustomInformation` は、Documentオブジェクトに属するメソッドです。つまり、「ファイル単位で溜まった不要な情報のゴミ屋敷を、一掃する掃除機」のようなものだと考えてください。
—
2. 実践:情報を完全抹消するクレンジング・マクロ
このコードは、ファイルを開いた際に残っている「ユーザー定義の非表示データ」や「メタデータ」を強制的にクリアします。
Sub CleanVisioDocument()
‘ エラーハンドリングの基本:予期せぬ停止を防ぐ
On Error GoTo ErrorHandler
Dim doc As Document
Set doc = ActiveDocument
‘ RemoveCustomInformationメソッドの引数
‘ 0 は「すべてのカスタム情報を削除」を意味します
‘ ※特定の情報を指定したい場合は定数が定義されています
Debug.Print “クレンジング開始: ” & doc.Name
‘ 第1引数: 削除対象のID (0は全情報を指す)
‘ 第2引数: 削除のスコープ (Trueでドキュメント全体)
doc.RemoveCustomInformation 0, True
MsgBox “クレンジングが完了しました。ファイルが最適化されています。”, vbInformation
Exit Sub
ErrorHandler:
MsgBox “エラーが発生しました: ” & Err.Description, vbCritical
End Sub
このコードの「ここが重要!」
- `0` というマジックナンバー: `RemoveCustomInformation` の第一引数に `0` を渡すことで、Visioが管理している全カスタム情報を一括でターゲットにします。
- `True` の意味: これはドキュメントの「深い部分」まで再帰的に探査することを意味します。ここを `False` にすると、階層の浅い部分しか掃除されず、隠れたメタデータが残ってしまう可能性があります。
—
3. なぜ「手動」ではなく「VBA」なのか?
「名前を付けて保存」のオプションでも似たようなことはできますが、業務自動化のプロはVBAを選びます。理由は以下の3点です。
1. ヒューマンエラーの排除: 手順を忘れることはあっても、マクロは忘れません。
2. バッチ処理: 100個のファイルを一瞬でクレンジングできます。
3. 状態の可視化: `Debug.Print` を使えば、どのファイルでどのデータが削除されたかをログとして残せます。
—
4. 陥りやすい罠とアドバイス
① 「元に戻す(Undo)」が効かない
`RemoveCustomInformation` は、実行すると「元に戻す」ことができません。実行前に必ずファイルのバックアップを取るか、別名で保存してから実行する癖をつけてください。
② シェイプデータは別枠
このコマンドは「ドキュメントのメタデータ」には強力ですが、各シェイプに埋め込まれた「シェイプデータ(旧カスタムプロパティ)」を消したい場合は、別途 `Shape.Delete` 等でのループ処理が必要です。
もしシェイプ内部のデータまで完全に空っぽにしたい場合は、ページ内の全シェイプを巡回する `For Each shp In Page.Shapes` を組み合わせる必要があります。
—
最後に:エンジニアとしての一歩
Visio VBAは、単に「図形を動かす」ための道具ではありません。ファイルの構造を理解し、その寿命(ライフサイクル)を管理するためのものです。
今日学んだ `RemoveCustomInformation` は、その第一歩に過ぎません。この技術をマスターすれば、あなたは単なる「マクロ使用者」から「Visioの構造をコントロールできるエンジニア」へと進化します。
「ここが動かない」という悩みがあれば、いつでも相談してください。壁を乗り越えるたびに、あなたの自動化スキルは磨かれていくはずです。頑張ってください!
