1

VBA サブルーチンにアクセスできるスタックのサイズにメモリ制限はありますか?

何らかの奇妙な理由で、変数をDim6 つ以上Range使用すると、スタックに空きがないというエラーが表示されます。

Range特に私が使用している連続していない大きなものはメモリを大量に消費していることがわかりますが、エラーを回避するためのベストプラクティスがあるかどうか知りたいです。

例:

Dim RR As Range
'Dim TestArea As Range
'Dim foremenList As Range
'Dim workerList As Range
'Dim workers As Range
'Dim Foremen As Range
Dim i As Integer
Dim R As Range
Dim EmplList(0 To 100) As Variant




'Set TestArea = Sheet90.Range("b4:q8, b15:q19, b26:q30")
'Set foremenList = Sheet90.Range("V24:V30")
Set RR = Sheet90.Range("v24:x45")
i = 0

これらの宣言のコメントを外すと、エラーが発生します。コメントしたままにしておくと、コメントしません。

サブ内の唯一の他のコードは次のとおりです。

For Each R In RR.Cells
   If Len(R.Value) > 0 Then
       'EmplList(i) = R.Value
       i = i + 1
    End If
Next R
Sheet90.Range("b40").Value = "Test3"

参考までに、これは 8 GB の RAM を搭載した Windows 7 ラップトップの Excel 2010 で実行されている Excel VBA です。モンスターではありませんが、前かがみでもありません。

4

2 に答える 2

2

@David Zemens と私がコメントで指摘したように、次のようなステートメントはSheet90.Range("b40").Value = "Test3"無害に見えますが、実際にはイベントをトリガーします。

注意すべきもう 1 つの点: 一部のステートメントは、ドラッグ アンド ドロップのように「ダブル イベント」をトリガーします。実際には、1 つのアクションによってトリガーされる 2 つのイベントです。この場合、ドラッグ後にイベントが発生し、ドロップが実行されてイベントが再発生します。これ(ドラッグアンドドロップ)は過去に私に苦痛を与えました..

EDIT : 私の最初のステートメントはLen(R.Value) > 0、再計算をトリガーしない を誤って参照していました。再計算をトリガーするのは最後の行です。指摘してくれたデビッドに感謝します!

于 2013-09-05T18:16:52.243 に答える