2016-10-31 2 views
0

ExcelのVBAで条件に基づいて値を設定しようとしていますが、スタックスペースに関するエラーが発生するたびにクラッシュし、ForceFullCalculationをワークブック別のSOの記事でアドバイスとして、私が手にエラーがある:問題の範囲に値が設定されているとExcelがクラッシュする

Run-time error '-2147417848 (80010108)': 

Method 'Value' of object 'Range' failed 

コードの行を

If Range("G4") = "Yes" Then 

    Range("K4:L6").Interior.ColorIndex = 4 ' green 
    Range("K4").Value = "x" 

End If 

コードでこれらのブロックの倍数があります。 値 'x'を設定する行をコメントアウトすると、コードはうまく動作しているようです。緑色(または色)に細胞を着色した後に値「X」に単一のセルを設定する場合

If Range("G4") = "Yes" Then 

    Range("K4:L6").Interior.ColorIndex = 4 ' green 
    'Range("K4").Value = "x" 

End If 

なぜそれがクラッシュしますか? 使用されているバージョンは、8GBのRAMを搭載したマシン上のExcel 2010 32ビット版です。

+2

「Worksheet_Change」のようなイベントの中でこれを行っていますか?通常、スタックスペースエラーは再帰によって発生します。 – Rory

+0

はい、WorkSheet_Change内にあります。それをクラッシュするのをやめさせる別の方法をお勧めしますか?あなたが言及している再帰がどこで起こっているのかわからない、私はExcel VBAに少し慣れている。 – warsong

+4

その後、セルを変更する前に 'Application.Enableevents = False'を追加する必要があります(これはあなたのイベントをもう一度トリガします)。その後、Trueにリセットします。 – Rory

答えて

0

通常、スタックスペースエラーは、セルをWorksheet_Changeイベント内から変更した場合など、再帰によって発生します。セルが呼び出され、セルが再び変更され、イベントが再度呼び出されます。これを避けるには、変更を加える前にイベントを無効にすることができます。

Application.Enableevents = False ' disable event processing 

' your code that makes the changes here 

Application.Enableevents = True ' reset events again 
+0

どのExcel VBA関数が再帰的であるかを簡単に知る方法はありますか?これは実際にこれを読んでいる人に起こる同様の問題を回避するか少なくとも特定することに役立ちます。 – warsong

+0

ロジックのみ。それらはどれも本質的に再帰的ではありませんが、 'Change'イベントからセルを変更するか、' SelectionChange'イベントのセルを選択すると、そのイベントを再度トリガーします。 – Rory

関連する問題