【入門編】初心者でも安心のVisio VBAエラーハンドリング:On Error構文で実行時例外をスマートに捉える – Visio VBA解析バイブル

スポンサーリンク

Visio VBAの「強制終了」にさようなら。現場で生き残るための「鉄壁エラーハンドリング」入門

こんにちは。業務自動化の世界へようこそ。
Visioで「マクロの記録」から一歩踏み出し、自力でコードを書き始めたあなた。素晴らしい挑戦です。

しかし、いざ自動化を進めると必ずぶつかる壁があります。それが「実行時エラー」です。
「存在しないシェイプを指定してしまった」「保護されているセルに書き込もうとした」。そんな些細なミスで、長い処理が途中で落ち、冷や汗をかいた経験はありませんか?

今日は、プロが現場で必ず実装する「死なないコード」の極意を伝授します。これさえ覚えれば、あなたのVisio VBAは「止まる」から「止まらない」へ劇的に進化します。

なぜVisio VBAは「沈黙」するのか?

Visioのオブジェクト(Application, Document, Page, Shape)は、非常に繊細です。
例えば、`ActivePage.Shapes(“存在しない名前”)` と書いた瞬間、Visioは「そんなものいないよ!」と叫び、コードの実行を強制終了させます。

これを防ぐのが `On Error` 構文 です。
初心者の方は「エラーが出ないように条件分岐すればいいのでは?」と考えがちですが、Visioの世界では「予測不能な事態(ロック、メモリ不足、外部参照の切断)」が頻発します。

「エラーを消す」のではなく、「エラーを賢く迎撃する」。 これが堅牢なプログラムの第一歩です。

鉄壁のエラーハンドリング:基本の「型」

私が現場で必ず書く、最もシンプルで強力なテンプレートがこちらです。まずはこの構造を指に覚え込ませてください。

Public Sub SafeShapeProcess()
‘ 1. エラーハンドラの宣言(エラーが起きたらどこへ飛ぶか)
On Error GoTo ErrorHandler

‘ — 本来やりたかった処理 —
Dim shp As Visio.Shape
Set shp = ActivePage.Shapes(“ターゲットのシェイプ”)
shp.Text = “更新完了”
‘ —————————-

‘ 正常終了時はここで抜ける(ここを忘れると下のエラー処理を通ってしまう!)
Exit Sub

ErrorHandler:
‘ 2. エラー発生時の対応
MsgBox “エラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“内容: ” & Err.Description, vbCritical, “処理中断”

‘ 3. 後処理(必要に応じて)
‘ ResetEvents 等があればここで記述
End Sub

このコードの「魂」とも言える3つのポイント

1. `On Error GoTo ErrorHandler`: 「何かが起きてもパニックにならず、指定したラベル(ErrorHandler)へ逃げろ」という司令塔です。
2. `Exit Sub`: これが重要です。正常に処理が終わった後に、エラー処理のコードまで実行されてしまわないよう、必ずここで出口を作ります。
3. `Err` オブジェクト: VBAには標準で「エラー情報を持った入れ物」が用意されています。これを見ることで、何が原因で死んだのかが即座に分かります。

現場の知見:なぜ「シェイプ操作」でよく落ちるのか

Visio開発で最も多いエラーは「存在しないオブジェクトへのアクセス」です。
これをスマートに防ぐには、以下のような「確認付きの操作」を組み込むのがプロの流儀です。

‘ シェイプの存在を確認してから操作する「プロの作法」
Dim shp As Visio.Shape
On Error Resume Next ‘ エラーを一旦無視する(エラーが起きても次へ進む)
Set shp = ActivePage.Shapes(“存在しないかもしれないシェイプ”)
On Error GoTo 0 ‘ エラー無視を解除(ここからは普通に検知する)

If shp Is Nothing Then
Debug.Print “シェイプが見つかりません。スキップします。”
Else
‘ 見つかった時だけ処理を実行
shp.Cells(“FillForegnd”).Formula = “RGB(255,0,0)”
End If

  • `On Error Resume Next`: 「この1行だけはエラーが起きても無視してくれ」という特例措置です。
  • `On Error GoTo 0`: これで「無視モード」を解除します。これを忘れると、後続の重大なエラーまで見逃してしまうので注意してください。

まとめ:あなたのコードが「システム」に変わる瞬間

エラーハンドリングを意識し始めると、プログラムの景色が変わります。
「エラーは悪」ではなく、「エラーはプログラムが教えてくれる貴重なシグナル」だと気づくはずです。

  • まずは `On Error GoTo` で守りを固める。
  • エラーが起きたら `Err.Description` でログを残す。
  • 「探す」「選択する」操作には必ず `Nothing` チェックを挟む。

これらを徹底するだけで、あなたのVisio VBAは「おもちゃ」から「業務を支える信頼できるツール」へと昇華します。

次は、もっと深い「イベント制御」や「Visio特有のセルの書き換え」についてお話ししましょう。ここをクリアしたあなたなら、もう大丈夫。自信を持って自動化の旅を続けてください!

何か不明点があれば、いつでも聞いてくださいね。応援しています。

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