Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Office Новый топик    Ответить
 Проблема с Refresh'ем объектов  [new]
Sotrudnik_1990
Guest
Доброго времени суток.

В Excel есть 3 таблицы, которые цепляются к оракловым таблицам. Необходимо их обновить и далее распихать по листам, отвформатировать, ...

Проблема в том, что когда запускаю макрос

cbook.RefreshAll
cSheet.Range(Cells(5, 1), Cells(icounter, jcounter)).Copy


вылетает ошибка о пустоте копируемого объекта - метод Copy отрабатывает раньше, чем обновятся объекты.

Подскажите, возможно ли это победить или необходимо использовать другой способ получения данных?
3 мар 15, 09:59    [17335580]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Refresh'ем объектов  [new]
Казанский
Member

Откуда:
Сообщений: 1307
Обновляйте таблицы по одной с ожиданием завершения:
MyQT.Refresh(BackgroundQuery:=False)
У метода RefreshAll нет такого параметра.
3 мар 15, 10:24    [17335689]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Проблема с Refresh'ем объектов  [new]
Heldar
Member

Откуда:
Сообщений: 9
Но тогда макрос после refresh-а перестает работать.
Прочитал StackOverflow и другие ресурсы интернета, в которых говорится об использовании методов и свойств "DoEvents", "BackgrgoundQuery = False" и CalculateUntilAsyncQueriesDone, - ничего это не помогает.
Как после refresh-а выполнить сохранение книги ActiveWorkbook.Save?
26 мар 19, 13:50    [21843732]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Refresh'ем объектов  [new]
The_Prist
Member

Откуда: www.excel-vba.ru
Сообщений: 1832
Sotrudnik_1990
возможно ли это победить или необходимо использовать другой способ получения данных?
самый простой вариант - Do Loop до тех пор, пока Cells(icounter, jcounter) не будет заполнена каким-то значением. Т.к. это у Вас последняя ячейка данных, то наличие в ней значения будет означать завершение выгрузки:
cbook.RefreshAll
Do While Cells(icounter, jcounter).value <> ""
doevents
loop
cSheet.Range(Cells(5, 1), Cells(icounter, jcounter)).Copy

главная проблема вполне логична: последняя ячейка должна обязательно иметь какое-то значение :)
26 мар 19, 17:52    [21844120]     Ответить | Цитировать Сообщить модератору
 Re: Проблема с Refresh'ем объектов  [new]
Heldar
Member

Откуда:
Сообщений: 9
Отлично! Все заработало. Спасибо большое!

PS. Если у вас несколько таблиц, то нужно каждую проверять на изменение/обновление данных.
И у всех таблиц должно быть отключено "Фоновое обновление".
28 мар 19, 17:30    [21846416]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Office Ответить