スタック領域が不足しています (エラー 28)

スタックとは、実行中のプログラムの需要に応じて動的に増減されるメモリの作業領域です。 このエラーの原因と解決策は次のとおりです。

  • FunctionSubProperty のいずれかのプロシージャのアクティブな呼び出しの数が多すぎる。 プロシージャの入れ子が深すぎないかどうかを確認します。 この問題は、再帰プロシージャ (自身を呼び出すプロシージャ) でよく発生します。 再帰プロシージャが正しく終了していることを確認してください。 [呼び出し] ダイアログ ボックスを使用して、(スタックの) アクティブなプロシージャを確認します。

  • ローカル変数に必要なローカル変数領域が使用可能な領域を超えている。

    いくつかの変数をモジュール レベルで宣言してみます。 PropertySub、または Function の各キーワードの前に Static を挿入して、プロシージャのすべての変数を静的変数として宣言することもできます。 Static ステートメントを使用して、プロシージャ内で個別に Static 変数を宣言することもできます。

  • 固定長文字列が多すぎます。 プロシージャ内の固定長文字列にすばやくアクセスできますが、文字列データ自体がスタックに配置されるため、可変長文字列よりも多くのスタック領域を使用します。 固定長文字列の一部を可変長文字列として再定義してみてください。 プロシージャで可変長文字列を宣言すると、文字列記述子 (データ自体ではなく) のみがスタックに配置されます。 また、スタック領域を必要としないモジュール レベルで文字列を定義することもできます。 モジュール レベルで宣言された変数は既定で パブリック であるため、文字列はモジュール内のすべてのプロシージャに表示されます。

  • 入れ子になった DoEvents 関数呼び出しの数が多すぎる。 [ 呼び出し ] ダイアログ ボックスを使用して、スタックのアクティブなプロシージャを確認します。

  • コードでイベントの連鎖がトリガーされている。 イベントの連鎖は、既にスタックにあるイベント プロシージャを呼び出すイベントがトリガーされると発生します。 終了していない再帰プロシージャ呼び出しに似ていますが、コードで明示的に呼び出されるのではなく Visual Basic によって呼び出されるため、よりわかりにくくなります。 [呼び出し] ダイアログ ボックスを使用して、(スタックの) アクティブなプロシージャを確認します。

[呼び出し] ダイアログ ボックスを表示するには、[デバッグ] ウィンドウの [プロシージャ] ボックスの右側にある [呼び出し] ボタンを選択するか、[呼び出し] コマンドを選択します。 詳細については、該当する項目を選択し、F1 キー (Windows の場合) または HELP (Macintosh の場合) を押してください。

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。