Excel VBA の実行時エラー辞典
実行時エラー '28':スタック領域が不足しています
自分自身を呼ぶ処理やイベントの再実行が、終わらず積み重なっていないか調べます。
よくある原因
- 再帰処理に終了条件がなく、同じ Sub を呼び続けています。
- 二つの処理が互いを呼び合い、元へ戻れなくなっています。
- Worksheet_Change 内のセル更新で、同じイベントが繰り返し発生しています。
- 深い呼び出しごとに大きなローカル変数を確保しています。
直し方
- 停止中に VBE の呼び出し履歴を確認し、同じ処理が重なっていないか調べます。
- 再帰処理を単純なループにできる場合は置き換え、終了条件を明示します。
- イベントなら対象セルを絞り、必要な区間だけイベントを止め、エラー時にも元の設定へ戻す構造にします。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
10 回の繰り返しが目的の例です。イベント制御は処理全体の設計が必要なので、この例では単純な再帰を修正しています。
修正前
Sub RepeatReport()
Debug.Print "集計"
RepeatReport
End Sub
修正後
Sub RepeatReport()
Dim i As Long
For i = 1 To 10
Debug.Print "集計", i
Next i
End Sub
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- 再帰呼び出しの直前にブレークポイントを置き、呼び出し履歴と終了条件を確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? Application.EnableEvents
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。
関連エラー
- 実行時エラー '3':Return に対応する GoSub がありません
- 実行時エラー '7':メモリが不足しています
- 実行時エラー '35':Sub、Function、または Property が定義されていません