Страницы: 1
RSS
RefreshAll для QueryTable - данные не успевают обновиться до того, как пойдут дальнейшие расчеты.
 
Добрый день.
В процедуре последовательно открываю файлы в которых QueryTable, обновляю данные (RefreshAll ), провожу некоторые манипуляции сохраняю и закрываю файл.
проблема в том, что в QueryTable стоит "фоновое обновление", и после RefreshAll  идет обновление данных и параллельно продолжает выполняться макрос. в связи с чем появляется диалоговое окно с вопросом "Это может прервать обновление данных. Продолжить?"

Собственно вопрос, как можно это обойти (т.е., чтоб пока обновление не прошло, макрос не продолжал "бежать")?
Как вижу, есть 2 варианта, ни один из которых мне не нравится:
1) Убрать флаг "фоновое обновление" (для меня не подойдет, т.к. "оркестр не мой, и музыку заказать не выйдет")
2) после RefreshAll  ставить ожидание Application.Wait (Now + TimeValue("какое-то время"))  - это получится не универсально (много не хочется ставить, чтоб не долго все это обновлялось, а если мало поставлю - риск, что в будущем вылезу за эти приделы)

Может кто сталкивался с таким и знает как добиться первоочередного выполнения RefreshAll  не убирая флаг "фоновое обновление"?
Изменено: Ivan.kh - 06.05.2016 16:07:58
 
попробуйте после .RefreshAll
Код
Application.CalculateUntilAsyncQueriesDone
чтобы не гадать на кофейной гуще, кто вам отвечает и после этого не совершать кучу ошибок - обратитесь к собеседнику на ВЫ - ответ на ваш вопрос получите - а остальное вас не касается (п.п.п. на форумах)
 
JeyCi, спасибо. Завтра протестирую и отпишусь Все отлично сработало ... еще раз огромное Вам спасибо.
Изменено: Ivan.kh - 11.05.2016 15:30:00
 
Анологичная задача! Только для внешних ссылок, т.е. обновление данных в ячейках из инета.
Но данная комманда подвешивает Excel. Что не так?
Код
ActiveWorkbook.Refreshall
Application.CalculateUntilAsyncQueriesDone
Изменено: davidtro3 - 13.11.2016 16:46:26
 
Доброе время суток.
Цитата
davidtro3 написал: Что не так?
Проблемы с переводчиком Google? Прямой перевод
Человеческий - пока не завершено обновление - ничего не делать. Потому и подвешивает :)
 
Как-то не помогает.
После CalculateUntilAsyncQueriesDone макрос просто перестает работать (дальше что-либо делать).
То же самое после DoEvents.
 
Добрый день. Подскажите почему может зависать excel, когда запускаю макрос?
Sub MyMacro()

   ThisWorkbook.RefreshAll

   Application.CalculateUntilAsyncQueriesDone

  ThisWorkbook.Save

  Call NextRun  

 End sub

 Без  Application.CalculateUntilAsyncQueriesDone

Всё срабатывает, но так как не успевают обновиться запросы, идёт конфликт с сохранением.

Изменено: Tani-kor - 29.10.2024 06:09:58
 
Tani-kor, метод который вы используете
Application.CalculateUntilAsyncQueriesDone
своим названием говорит о том, что он ассинхронный, и то, что по мере его завершения должна выполниться калькуляция. Т.о. сохранение книги нужно выполнять в событии Calculate, когда все квери-запросы гарантировано будут выполнены
Изменено: testuser - 29.10.2024 09:35:53
 
Цитата
Ivan.kh написал:
1) Убрать флаг "фоновое обновление" (для меня не подойдет, т.к. "оркестр не мой, и музыку заказать не выйдет")
если сделать все правильно - все получится:
Как дождаться обновления выполнения запроса
Как обновить запросы Power Query(и не только) в указанном порядке?
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо. Как раз и решила с помощью 2 ссылки. Просто было интересно почему не сработал первый вариант.  
Страницы: 1
Читают тему
Наверх