Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Зацикливание при обработке события Calculate - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Зацикливание при обработке события Calculate
Формуляр Дата: Четверг, 18.08.2011, 14:33 | Сообщение № 1
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Всем доброго времени суток!
Попытался привесить обновление SQL-запроса на стандартный пересчёт листа - получил, понятное дело, зацикливание.
Кто подскажет как с ним борться?

Строчка, с циклящимся вызовом (код к листу Query1) сейчас закомментирована.
К сообщению приложен файл: 2609048.xls (55.0 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Четверг, 18.08.2011, 14:34
 
Ответить
СообщениеВсем доброго времени суток!
Попытался привесить обновление SQL-запроса на стандартный пересчёт листа - получил, понятное дело, зацикливание.
Кто подскажет как с ним борться?

Строчка, с циклящимся вызовом (код к листу Query1) сейчас закомментирована.

Автор - Формуляр
Дата добавления - 18.08.2011 в 14:33
Hugo Дата: Четверг, 18.08.2011, 16:14 | Сообщение № 2
Группа: Друзья
Ранг: Участник клуба
Сообщений: 3703
Репутация: 792 ±
Замечаний: 0% ±

365
А так?
[vba]
Код
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
            Me.Parent.UpdateActvShtConnection
Application.EnableEvents = True
End Sub
[/vba]

Хотя мне кажется, что это логически не правильно - нужно сперва обновиться, потом пересчитывать.


webmoney: E265281470651 Z422237915069
USDT TRC20: TN8XeEF17o5KPBD9pNwYzNyruycuAc2mVD
 
Ответить
СообщениеА так?
[vba]
Код
Private Sub Worksheet_Calculate()
Application.EnableEvents = False
            Me.Parent.UpdateActvShtConnection
Application.EnableEvents = True
End Sub
[/vba]

Хотя мне кажется, что это логически не правильно - нужно сперва обновиться, потом пересчитывать.

Автор - Hugo
Дата добавления - 18.08.2011 в 16:14
Формуляр Дата: Четверг, 18.08.2011, 16:59 | Сообщение № 3
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Hugo,
Пробовал - всё равно циклится почему-то.
Причём циклится при нажатии кнопки, а пересчёт, такое впечатление, что автоматом не запускет.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеHugo,
Пробовал - всё равно циклится почему-то.
Причём циклится при нажатии кнопки, а пересчёт, такое впечатление, что автоматом не запускет.

Автор - Формуляр
Дата добавления - 18.08.2011 в 16:59
Формуляр Дата: Четверг, 18.08.2011, 17:37 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
С автопересчётом вcё в порядке - циклится по-полной smile
А ручной чего-то не запускается - ни F9 ни с шифтом.


Excel 2003 EN, 2013 EN
 
Ответить
СообщениеС автопересчётом вcё в порядке - циклится по-полной smile
А ручной чего-то не запускается - ни F9 ни с шифтом.

Автор - Формуляр
Дата добавления - 18.08.2011 в 17:37
Формуляр Дата: Четверг, 18.08.2011, 18:13 | Сообщение № 5
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

Excel 2003, 2013
Отключил автопересчёт.
Теперь, вроде, не циклится и запрос обновляет по F9.
Но только формулы теперь не считаются
К сообщению приложен файл: 8455339.xls (55.0 Kb)


Excel 2003 EN, 2013 EN

Сообщение отредактировал Формуляр - Четверг, 18.08.2011, 18:13
 
Ответить
СообщениеОтключил автопересчёт.
Теперь, вроде, не циклится и запрос обновляет по F9.
Но только формулы теперь не считаются

Автор - Формуляр
Дата добавления - 18.08.2011 в 18:13
Формуляр Дата: Четверг, 18.08.2011, 23:02 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 832
Репутация: 255 ±
Замечаний: 0% ±

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

И, самое смешное, что решение с самого начала висело у меня в комментах, перед самым носом!


Excel 2003 EN, 2013 EN

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

И, самое смешное, что решение с самого начала висело у меня в комментах, перед самым носом!

Автор - Формуляр
Дата добавления - 18.08.2011 в 23:02
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!