Excel VBA の実行時エラー辞典

実行時エラー '28':スタック領域が不足しています

自分自身を呼ぶ処理やイベントの再実行が、終わらず積み重なっていないか調べます。

よくある原因

直し方

  1. 停止中に VBE の呼び出し履歴を確認し、同じ処理が重なっていないか調べます。
  2. 再帰処理を単純なループにできる場合は置き換え、終了条件を明示します。
  3. イベントなら対象セルを絞り、必要な区間だけイベントを止め、エラー時にも元の設定へ戻す構造にします。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。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

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. 再帰呼び出しの直前にブレークポイントを置き、呼び出し履歴と終了条件を確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? Application.EnableEvents

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料