2016-10-31 5 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», код, кажется, работает нормально.

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

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

End If 

Почему это сбой при установке одной ячейки к значению «х» после окрашивания клеток с зеленым (или любого цвета)? Используемая версия - 32-разрядная версия Excel 2010 на компьютере с 8 ГБ оперативной памяти.

+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

Только логика. Ни один из них не является по сути рекурсивным, но логически, если вы * меняете * ячейку из события «Изменить» или * выбираете ячейку в событии «SelectionChange», вы снова запустите это событие. – Rory

Смежные вопросы