【入門編】【上級者向け】実行時エラーを完全に封じ込める、表操作のための堅牢なエラーハンドリング – Word VBA解析バイブル

スポンサーリンク

【Word VBA】その表、本当にそこにありますか?「実行時エラー」を完封する防衛的プログラミングの極意

こんにちは。Word VBAの深淵へようこそ。

マクロの記録から一歩踏み出し、自力でコードを書き始めると必ず直面する壁があります。そう、「実行時エラー」という名の魔物です。特に「表(Table)」の操作は、Word VBAの中でも最も気まぐれで、壊れやすい領域の一つ。

「昨日まで動いていたのに、なぜか今日はエラーで止まる」
「セルを結合したら、途端にオブジェクトが見つからないと言われる」

そんな経験はありませんか?今日は、あなたの書くコードを「プロレベルの堅牢性」へと引き上げる、表操作の防衛術を伝授します。

—

1. なぜWordの表は「裏切り」を起こすのか

Wordの表は、Excelのセルとは根本的に構造が異なります。セルが結合されればインデックス番号はズレますし、そもそもユーザーが誤って表の一部を削除してしまえば、プログラムは路頭に迷います。

初心者が陥りやすいのは、「そこにあるはずだ」という性善説に基づいたコードです。

‘ 危険なコードの例
ActiveDocument.Tables(1).Cell(1, 1).Range.Text = “データ”

これの何が悪いのか?もし「表が1つもなかったら」「1行目が結合されていたら」、このコードは一瞬で実行時エラー「インデックスが有効範囲にありません」を吐き出し、プログラムは強制終了します。

—

2. エラーを封じ込める「防御の三原則」

プロの現場では、「オブジェクトが存在するか?」「アクセス可能か?」を常に疑うことからすべてが始まります。

原則①:存在チェックを怠らない

対象に触れる前に、必ず `If` 文で存在を確認します。

原則②:結合セルをケアする

`Table.Cell(row, col)` は、結合されたセルに対して呼び出すとエラーを返します。`Cell.Information(wdWithInTable)` などで状態を監視する必要があります。

原則③:エラーハンドラを「盾」にする

予測不能な事態には、VBAの `On Error` 文で安全地帯を確保します。

—

3. 実装:これがプロの「表操作」テンプレートだ

以下のコードは、エラーを未然に防ぎ、もし何か起きても「なぜダメだったか」をログとして残す構成になっています。

Sub SafeTableOperation()
Dim doc As Document
Dim tbl As Table

Set doc = ActiveDocument

‘ — 防御の盾を張る —
On Error GoTo ErrorHandler

‘ 1. 表が存在するか確認
If doc.Tables.Count = 0 Then
MsgBox “表が見つかりません。処理を中断します。”, vbCritical
Exit Sub
End If

Set tbl = doc.Tables(1)

‘ 2. 特定のセルにアクセス可能かチェック(結合セル対策)
‘ ※今回は1行1列目が結合されていないか確認する例
If tbl.Cell(1, 1).Range.Information(wdWithInTable) = True Then
‘ 3. 値を流し込む
tbl.Cell(1, 1).Range.Text = “堅牢なデータ入力”
End If

MsgBox “処理が完了しました。”
Exit Sub

ErrorHandler:
‘ エラー時のリカバリ処理
MsgBox “予期せぬエラーが発生しました。” & vbCrLf & _
“エラー番号: ” & Err.Number & vbCrLf & _
“エラー内容: ” & Err.Description, vbCritical
End Sub

—

4. コードの解説:ここが「プロのこだわり」

  • `On Error GoTo ErrorHandler`:

コードの冒頭で「もし何かが起きても、ここでキャッチする」という約束をします。これがないと、ユーザーの画面に無慈悲なシステムエラーウィンドウが表示されてしまいます。

  • `doc.Tables.Count = 0`:

「表がある前提」を捨てる。これが最も重要なマインドセットです。

  • `Range.Information(wdWithInTable)`:

そのセルが本当に「表のセル」として正当な位置にあるかを判定します。結合で構造が歪んでいる場合、ここで引っ掛けることができます。

—

最後に:完璧を目指さず、壊れないことを目指す

Word VBAの世界では、完璧に動くコードを書くことよりも、「壊れた時に、どう振る舞うか」を設計することの方が100倍重要です。

今日紹介した「防衛的プログラミング」を身につければ、あなたの作るマクロはもう「気まぐれなツール」ではなく、「頼れる業務の相棒」へと進化します。

「ここをクリアすれば、Word VBAの基本はバッチリですよ」

焦る必要はありません。まずは今のコードに `If` 文を一つ足すところから始めてみてください。その小さな一歩が、伝説のエンジニアへの道筋です。

また次回の講義でお会いしましょう。質問があればいつでもどうぞ。あなたのコードが、今日も華麗に動作することを願っています。

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