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

Вход

Регистрация

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

 

= Мир MS Excel/Обновление данных с сайта не проходит до конца - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обновление данных с сайта не проходит до конца (Макросы/Sub)
Обновление данных с сайта не проходит до конца
bazhalex Дата: Вторник, 07.04.2015, 01:09 | Сообщение № 1
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
В файле используется WEB запрос (таблица котировок с биржи) с сохранением результатов на отдельном листе (Лист2). С помощью макроса нажатием на кнопку происходит обновление данных. При этом для удобства отображение форматированной таблицы с нужными столбцами на Листе1. Проблема заключается в том, что хоть команда на обновление данных идёт впервую очередь, но почему-то копирование необходимых ячеек происходит раньше и в итоговой таблице получаем устаревшие данные. Как можно изменить чтобы в итоговую таблицу копировались актуальные данные?
Спасибо
К сообщению приложен файл: 9303619.zip (72.6 Kb)
 
Ответить
СообщениеВ файле используется WEB запрос (таблица котировок с биржи) с сохранением результатов на отдельном листе (Лист2). С помощью макроса нажатием на кнопку происходит обновление данных. При этом для удобства отображение форматированной таблицы с нужными столбцами на Листе1. Проблема заключается в том, что хоть команда на обновление данных идёт впервую очередь, но почему-то копирование необходимых ячеек происходит раньше и в итоговой таблице получаем устаревшие данные. Как можно изменить чтобы в итоговую таблицу копировались актуальные данные?
Спасибо

Автор - bazhalex
Дата добавления - 07.04.2015 в 01:09
krosav4ig Дата: Вторник, 07.04.2015, 02:40 | Сообщение № 2
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
1 вариант решения: отключить фоновое обновление подключения
2 вариант использовать модуль класса
добавить модуль класса Class1 с кодом
[vba]
Код
Option Explicit
Public Refreshed As Boolean
Private WithEvents qt As Excel.QueryTable
Public Property Set QryTbl(ByVal QryTbl As QueryTable): Set qt = QryTbl:
End Property
Private Sub qt_BeforeRefresh(Cancel As Boolean)
        Refreshed = False
End Sub
Private Sub qt_AfterRefresh(ByVal Success As Boolean)
        Refreshed = True
End Sub
[/vba]

[vba]
Код
ActiveWorkbook.RefreshAll
[/vba]
заменить на
[vba]
Код
    Dim QtClass As Class1: Set QtClass = New Class1
     Set QtClass.QryTbl = Sheets("data").QueryTables("market_1")
     Sheets("data").QueryTables("market_1").Refresh
     Do Until QtClass.Refreshed: DoEvents: Loop
[/vba]


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Вторник, 07.04.2015, 13:02
 
Ответить
Сообщение1 вариант решения: отключить фоновое обновление подключения
2 вариант использовать модуль класса
добавить модуль класса Class1 с кодом
[vba]
Код
Option Explicit
Public Refreshed As Boolean
Private WithEvents qt As Excel.QueryTable
Public Property Set QryTbl(ByVal QryTbl As QueryTable): Set qt = QryTbl:
End Property
Private Sub qt_BeforeRefresh(Cancel As Boolean)
        Refreshed = False
End Sub
Private Sub qt_AfterRefresh(ByVal Success As Boolean)
        Refreshed = True
End Sub
[/vba]

[vba]
Код
ActiveWorkbook.RefreshAll
[/vba]
заменить на
[vba]
Код
    Dim QtClass As Class1: Set QtClass = New Class1
     Set QtClass.QryTbl = Sheets("data").QueryTables("market_1")
     Sheets("data").QueryTables("market_1").Refresh
     Do Until QtClass.Refreshed: DoEvents: Loop
[/vba]

Автор - krosav4ig
Дата добавления - 07.04.2015 в 02:40
bazhalex Дата: Вторник, 07.04.2015, 09:05 | Сообщение № 3
Группа: Пользователи
Ранг: Прохожий
Сообщений: 2
Репутация: 0 ±
Замечаний: 0% ±

Excel 2007
krosav4ig, krosav4ig,
заменить на
Dim QtClass As Сlass1: Set QtClass = New Сlass1
Set QtClass.QryTbl = Sheets("data").QueryTables("market_1")
Sheets("data").QueryTables("market_1").Refresh
Do Until classQtEvents.Refreshed: DoEvents: Loop


Всё сделал, ругается на QryTbl =
"Compile Error - Method or data member not found"

Правда пока пробывал на 2003...

По первому пункту всё заработало как надо. Спасибо.
К сообщению приложен файл: VBA.zip (92.2 Kb)


Сообщение отредактировал bazhalex - Вторник, 07.04.2015, 09:15
 
Ответить
Сообщениеkrosav4ig, krosav4ig,
заменить на
Dim QtClass As Сlass1: Set QtClass = New Сlass1
Set QtClass.QryTbl = Sheets("data").QueryTables("market_1")
Sheets("data").QueryTables("market_1").Refresh
Do Until classQtEvents.Refreshed: DoEvents: Loop


Всё сделал, ругается на QryTbl =
"Compile Error - Method or data member not found"

Правда пока пробывал на 2003...

По первому пункту всё заработало как надо. Спасибо.

Автор - bazhalex
Дата добавления - 07.04.2015 в 09:05
KSV Дата: Вторник, 07.04.2015, 11:16 | Сообщение № 4
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
потому, что в классе метод называется QryTble, а не QryTbl


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333
 
Ответить
Сообщениепотому, что в классе метод называется QryTble, а не QryTbl

Автор - KSV
Дата добавления - 07.04.2015 в 11:16
krosav4ig Дата: Вторник, 07.04.2015, 11:44 | Сообщение № 5
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
да, эт мой косяк %) , исправил код в посте


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460
 
Ответить
Сообщениеда, эт мой косяк %) , исправил код в посте

Автор - krosav4ig
Дата добавления - 07.04.2015 в 11:44
KSV Дата: Вторник, 07.04.2015, 14:10 | Сообщение № 6
Группа: Друзья
Ранг: Ветеран
Сообщений: 770
Репутация: 255 ±
Замечаний: 0% ±

Excel 2013
krosav4ig, а зачем весь этот "огород", с хуком на события QueryTable в классе?
Если только для синхронизации метода [QueryTable].Refresh, то можно было просто вот так:
[vba]
Код
Worksheets("data").QueryTables("market_1").Refresh False ' синхронный вызов
[/vba]
Или я что-то недопонял?... :)


KSV.VBA@gmail.com
Яндекс.Деньги: 410011921213333


Сообщение отредактировал KSV - Вторник, 07.04.2015, 14:11
 
Ответить
Сообщениеkrosav4ig, а зачем весь этот "огород", с хуком на события QueryTable в классе?
Если только для синхронизации метода [QueryTable].Refresh, то можно было просто вот так:
[vba]
Код
Worksheets("data").QueryTables("market_1").Refresh False ' синхронный вызов
[/vba]
Или я что-то недопонял?... :)

Автор - KSV
Дата добавления - 07.04.2015 в 14:10
krosav4ig Дата: Четверг, 09.04.2015, 11:54 | Сообщение № 7
Группа: Друзья
Ранг: Старожил
Сообщений: 2347
Репутация: 989 ±
Замечаний: 0% ±

Excel 2007,2010,2013
KSV, ну так не интересно :p


email:krosav4ig26@gmail.com WMR R207627035142 WMZ Z821145374535 ЯД 410012026478460

Сообщение отредактировал krosav4ig - Четверг, 09.04.2015, 11:54
 
Ответить
СообщениеKSV, ну так не интересно :p

Автор - krosav4ig
Дата добавления - 09.04.2015 в 11:54
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Обновление данных с сайта не проходит до конца (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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