Excel VBA の不適切なコードを調べている同僚が何人かいて、コール スタックのレベル数に制限があるのではないかと考えています。
4843 次
6 に答える
6
関数が末尾再帰であり、VBA がそれを処理できる (できない) 場合を除き、スタック オーバーフローが発生します。
簡単なテストとして、次のスニペットをハッキングしました。
Dim count As Integer
Sub Rec()
count = count + 1
Cells(1, 1) = count
Call Rec
End Sub
これは、少なくとも私のバージョンの Excel 2007 では、これの制限が 4007 回の繰り返しであることを示しています。
于 2009-12-08T10:37:44.157 に答える
2
簡単な答えは「はい」です。最終的にはスタックオーバーフローの例外が発生します。
ただし、制限が何であるかはわかりません。
于 2009-12-08T10:28:05.747 に答える
2
このマクロをExcel2003で実行したところ、「スタックスペースが不足しています」というエラー28が発生する前に、4775回の呼び出しが発生しました。
Sub Macro1()
recurse (0)
End Sub
Sub recurse(level As Long)
ActiveCell.FormulaR1C1 = Str$(level)
Call recurse(level + 1)
End Sub
于 2009-12-08T10:35:01.707 に答える
0
Excel 2013 で Anders のコードを実行したところ、結果は 1180 しかありませんでした。新しいバージョンの Excel で再帰制限が減ったのか、それとも問題がマシンに依存しているのか、それ以外なのかはわかりません。
編集: また、変更: ActiveCell.FormulaR1C1 = Str$(level) to Range("A1").FormulaR1C1 = Str$(level)
また、コール数は 807 に減少しました。Option Explicit も追加していました。
于 2015-03-16T13:56:34.523 に答える