Всем доброго времени суток! Попытался привесить обновление SQL-запроса на стандартный пересчёт листа - получил, понятное дело, зацикливание. Кто подскажет как с ним борться?
Строчка, с циклящимся вызовом (код к листу Query1) сейчас закомментирована.
Всем доброго времени суток! Попытался привесить обновление SQL-запроса на стандартный пересчёт листа - получил, понятное дело, зацикливание. Кто подскажет как с ним борться?
Строчка, с циклящимся вызовом (код к листу Query1) сейчас закомментирована.Формуляр
Ну наконец-то допёрло до меня, в чём тут фокус! Весьма, кстати, познавательно. По крайней мере, с ходу аналогов нигде не нашлось. А фишка вот какая: ещё в самом начале, заглянув в стек, подивился, что зацикливание происходит не реккурсивно, а последовательно. Странно это мне показалось ... Но по неопытности решил, что это у события пересчёта специфика такая. А фокус в том, что запрос выполнялся по умолчанию в фоновом режиме. То есть, Worksheet_Calculate() блокирует события и вызывает запрос - но запрос завершается уже после завершения Worksheet_Calculate()! Когда события снова активны и все контрольные флажки сброшены обратно. Запрос обновляет данные - обновление данных вызывает пересчёт формул - после пересчёта формул вызывается Worksheet_Calculate, который снова запускает запрос в фоновом режиме ... В общем, как только раскоментировал BackgroundQuery:=False, всё чудненько заработало.
И, самое смешное, что решение с самого начала висело у меня в комментах, перед самым носом!
Ну наконец-то допёрло до меня, в чём тут фокус! Весьма, кстати, познавательно. По крайней мере, с ходу аналогов нигде не нашлось. А фишка вот какая: ещё в самом начале, заглянув в стек, подивился, что зацикливание происходит не реккурсивно, а последовательно. Странно это мне показалось ... Но по неопытности решил, что это у события пересчёта специфика такая. А фокус в том, что запрос выполнялся по умолчанию в фоновом режиме. То есть, Worksheet_Calculate() блокирует события и вызывает запрос - но запрос завершается уже после завершения Worksheet_Calculate()! Когда события снова активны и все контрольные флажки сброшены обратно. Запрос обновляет данные - обновление данных вызывает пересчёт формул - после пересчёта формул вызывается Worksheet_Calculate, который снова запускает запрос в фоновом режиме ... В общем, как только раскоментировал BackgroundQuery:=False, всё чудненько заработало.
И, самое смешное, что решение с самого начала висело у меня в комментах, перед самым носом! Формуляр
Excel 2003 EN, 2013 EN
Сообщение отредактировал Формуляр - Четверг, 18.08.2011, 23:14