【入門編】パスワード保護・読み取り専用ドキュメントのVBAリカバリ処理と例外ハンドリング – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの「鉄壁」を築く:パスワードとロックを華麗に捌く極限の例外処理

こんにちは。自動化の世界へようこそ。
マクロの記録ボタンを押して満足している段階は、もう卒業ですね。現場で実際にVisioを操っていると、必ずぶつかる壁があります。「パスワードがかかって開けない」「誰かが編集中で書き込み権限がない」。

これらはエラーではありません。「業務運用上の必然」です。

今日は、Visio VBAのオブジェクトモデルを深く理解し、どんな状況でもアプリケーションをクラッシュさせない「堅牢なドキュメントハンドリング」の極意を伝授します。ここをクリアすれば、あなたはもうただの「コードを書く人」ではなく「システムを制御するエンジニア」です。

1. Visioオブジェクトモデルの「階層」を理解する

VisioのVBAは、ドキュメントを開く際に以下の順序でオブジェクトを生成します。

1. Application: Visioそのもの。
2. Documents: 開いているドキュメントのコレクション。
3. Document: 個別のファイル。

ここで重要なのは、`Documents.Open` メソッドを実行した瞬間、Visioは「ファイルを開こう」と全力を尽くします。しかし、そこにパスワードや読み取り専用の壁があれば、Visioは容赦なく「実行時エラー」を投げてプログラムを停止させます。

私たちの仕事は、この「Visioの悲鳴(エラー)」を先回りして受け止め、静かにログに記録し、次の仕事へ向かわせることです。

2. 現場で使える「鉄壁のオープン処理」コード

以下のコードは、単にファイルを開くのではなく、エラーを制御下におくための「防御的プログラミング」のテンプレートです。

Sub OpenVisioDocumentSafely(strFilePath As String)
Dim vsoApp As Visio.Application
Dim vsoDoc As Visio.Document

Set vsoApp = Application

‘ エラーが発生しても停止させない(これが鉄則)
On Error Resume Next

‘ ドキュメントを開く
‘ 読み取り専用で開くフラグ(visOpenRO)を組み合わせるのがコツ
Set vsoDoc = vsoApp.Documents.OpenEx(strFilePath, visOpenRO)

‘ エラーを判定
If Err.Number <> 0 Then
‘ ここにログ出力処理を記述(テキストファイルやイミディエイトウィンドウ)
Debug.Print “【エラー検知】ファイルが開けません: ” & strFilePath
Debug.Print “エラー内容: ” & Err.Description

‘ 発生したエラーをクリアして運用を続行
Err.Clear
Exit Sub
End If

‘ — 以下、正常に開けた場合の処理 —
On Error GoTo 0 ‘ エラー制御を元に戻す
Debug.Print “成功: ” & vsoDoc.Name

‘ 処理が終わったら適切に閉じる(メモリリークを防ぐ)
vsoDoc.Close
End Sub

コードの重要ポイント解説

  • `On Error Resume Next`: これを宣言した直後のコードでエラーが発生しても、VBAは止まらずに次の行へ進みます。これが「例外ハンドリング」の第一歩です。
  • `visOpenRO`: `Open`メソッドの代わりに`OpenEx`を使い、読み取り専用(ReadOnly)を明示的に指定することで、他ユーザーの編集中による書き込みロックを防ぎます。
  • `Err.Clear`: エラーを処理した後は、必ずクリアしてください。これを忘れると、後続の無関係な処理まで「エラーが発生している」と誤認されます。

3. なぜ「記録」と「スキップ」が重要なのか?

初心者のうちは、「エラーが出たらプログラムを直そう」と考えがちです。しかし、業務自動化の世界では「エラーは発生するもの」という前提で設計します。

  • パスワード保護: 権限のないファイルに遭遇したとき、プログラムが止まるとその後の100個の処理がすべてストップします。
  • 読み取り専用: 誰かが開いているファイルに対して「書き込み」を試みるとクラッシュしますが、「読み取り」なら共存可能です。

これらを「ログ」という形で記録しておけば、翌朝、あなたは「どのファイルが開けなかったのか」だけを確認して、個別に対処すればいいのです。これが「運用に耐えうる自動化」です。

4. 最後に:エンジニアとしての心構え

Visio VBAは、オブジェクトの生成・破棄にリソースを大きく消費します。
今回紹介したように、ドキュメントを `Set` して、終わったら `Close` する。このライフサイクルを意識するだけで、あなたのマクロは劇的に安定します。

「動けばいい」コードから「止まらない」コードへ。
この例外処理の技術をマスターしたあなたは、もう現場で頼られる自動化エンジニアの一員です。

次は、開いたドキュメント内の `Page` や `Shape` をトラバース(探索)して情報を抽出する方法を一緒に見ていきましょう。Visioの世界はまだまだ深いですから。

何か不明な点があれば、いつでも聞いてくださいね。一緒に最高峰の自動化を構築していきましょう。

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