Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Application.EnableEvents = False
'Здесь можно изменять значение ячейки(диапазона)
Application.EnableEvents = True
End Sub
Капризный TextBox
При изменении значения в этой ячейке запускается некая обработка.
Проблема в том, что в этой обработке заложено программное изменение этой самой ячейки,
что приводит к повторному вызову обработки. Excell - умная штука и разрешает наступить на грабли только два раза (т.е. третий и далее раз обработка не вызывается, наверное потому что во втором вызове фактически изменения ячейки не происходит, хотя такая команда выполняется).
Вопрос: МОЖНО ЛИ ВРЕМЕННО ДЕАКТИВИРОВАТЬ ОБРАБОТКУ, ИЗМЕНИТЬ СВЯЗАННУЮ С НЕЙ ЯЧЕЙКУ и ВОССТАНОВИТЬ АКТИВАЦИЮ ПОТОМ, ПРИЧЕМ ВНУТРИ САМОЙ ОБРАБОТКИ??
Попытка типа TextBox.LinkedCell = ""
<изменить ячейку>
TextBox.LinkedCell = <снова прицепить ячейку>
не проходит...
Хм... А если объявить глобальную переменную типа Boolean. При входе в обработчик присваивать ей True, а при выходе - False. Но если при вызове функции она уже была True, то обработку не выполнять и сразу выходить.
Цитата: KIV
Хм... А если объявить глобальную переменную типа Boolean. При входе в обработчик присваивать ей True, а при выходе - False. Но если при вызове функции она уже была True, то обработку не выполнять и сразу выходить.
Если бы все так было очевидно, то это могли бы сделать и разработчики этих самых ActiveX.
Раньше я делал подобные фокусы, только чаще не с глобальными, а со статическими переменными. Оно вроде и работало, но было неудобно в отладке - при ошибках значения этих переменных не сохранялись... Аналогичная история с CheckBox-ами, оне тоже сперва меняют свое собственное состояние, а потом запускают привязанную к ним обработку. Естественно, если эта обработка завершается нештатно (или вообще зависает), то состояние CheckBox назад не откатывается... Не говоря уже о том, что в обработке есть попытка изменить состояние породившего ея CheckBox-а.
Но идея хороша! Вместо переменных надо попробовать использовать какие-нибудь скрытые ячейки в листах.
Проблема в том, что в этой обработке заложено программное изменение этой самой ячейки,
что приводит к повторному вызову обработки[/quote]
Если речь идёт о событии, типа Worksheet_Change, то :
Код: