Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Капризный TextBox

411
19 июля 2011 года
Serzh
136 / / 09.07.2003
В Excell создан TextBox с привязкой к конкретной ячейке.
При изменении значения в этой ячейке запускается некая обработка.
Проблема в том, что в этой обработке заложено программное изменение этой самой ячейки,
что приводит к повторному вызову обработки. Excell - умная штука и разрешает наступить на грабли только два раза (т.е. третий и далее раз обработка не вызывается, наверное потому что во втором вызове фактически изменения ячейки не происходит, хотя такая команда выполняется).
Вопрос: МОЖНО ЛИ ВРЕМЕННО ДЕАКТИВИРОВАТЬ ОБРАБОТКУ, ИЗМЕНИТЬ СВЯЗАННУЮ С НЕЙ ЯЧЕЙКУ и ВОССТАНОВИТЬ АКТИВАЦИЮ ПОТОМ, ПРИЧЕМ ВНУТРИ САМОЙ ОБРАБОТКИ??
Попытка типа TextBox.LinkedCell = ""
<изменить ячейку>
TextBox.LinkedCell = <снова прицепить ячейку>
не проходит...
399
19 июля 2011 года
KIV
432 / / 20.01.2009
Хм... А если объявить глобальную переменную типа Boolean. При входе в обработчик присваивать ей True, а при выходе - False. Но если при вызове функции она уже была True, то обработку не выполнять и сразу выходить.
411
19 июля 2011 года
Serzh
136 / / 09.07.2003
Цитата: KIV
Хм... А если объявить глобальную переменную типа Boolean. При входе в обработчик присваивать ей True, а при выходе - False. Но если при вызове функции она уже была True, то обработку не выполнять и сразу выходить.



Если бы все так было очевидно, то это могли бы сделать и разработчики этих самых ActiveX.
Раньше я делал подобные фокусы, только чаще не с глобальными, а со статическими переменными. Оно вроде и работало, но было неудобно в отладке - при ошибках значения этих переменных не сохранялись... Аналогичная история с CheckBox-ами, оне тоже сперва меняют свое собственное состояние, а потом запускают привязанную к ним обработку. Естественно, если эта обработка завершается нештатно (или вообще зависает), то состояние CheckBox назад не откатывается... Не говоря уже о том, что в обработке есть попытка изменить состояние породившего ея CheckBox-а.
Но идея хороша! Вместо переменных надо попробовать использовать какие-нибудь скрытые ячейки в листах.

275
19 июля 2011 года
pashulka
985 / / 19.09.2004
[quote=Serzh]При изменении значения в этой ячейке запускается некая обработка.
Проблема в том, что в этой обработке заложено программное изменение этой самой ячейки,
что приводит к повторному вызову обработки[/quote]

Если речь идёт о событии, типа Worksheet_Change, то :

 
Код:
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
    Application.EnableEvents = False
    'Здесь можно изменять значение ячейки(диапазона)
    Application.EnableEvents = True
End Sub
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог