Страницы: 1
RSS
Как сделать таймер для автообновляемого листа., Как сделать таймер для автообновляемого листа.
 
Очень нужен таймер обратного отчета, лист обновляется автоматически через выставленный параметр задержки, нужно визуализировать процесс обратного отчета оставшегося времени (можно в ячейке), и чтобы отчет начинался заново после каждого окончания автообновления, такое осуществимо?
 
Narmer,
т.е. нужно указать через сколько начнется обновление?
может быть лучше обновлять данные вот так:
Код
Sub обновить_запросы()
For Each oc In ThisWorkbook.Connections        'запоминаем значение обновления в фоне для запроса
        IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
        'выставляем принудительно ждать завершения запроса
        oc.OLEDBConnection.BackgroundQuery = False
        'обновляем запрос
        oc.Refresh
        'возвращаем обновление в фоне в первоначальное состояние
       oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
    Next
End Sub
End Sub

или так
Код
Sub обновить_запрос()
'   Если надо обновить только один запрос
    Set oc = ThisWorkbook.Connections("Запрос — Бюджет")
    IsBG_Refresh = oc.OLEDBConnection.BackgroundQuery
    oc.OLEDBConnection.BackgroundQuery = False
    oc.Refresh
    oc.OLEDBConnection.BackgroundQuery = IsBG_Refresh
Изменено: evgeniygeo - 27.09.2022 09:46:00
 
Цитата
написал:
Narmer,
т.е. нужно указать через сколько начнется обновление?
нет, нужно сколько осталось времени до окончания обновления.
 
Narmer,
а для чего данная информация? слишком долго обновляется?

и как Вы себе это представляете? как можно замерить не завершенный процесс? можно попробовать взять какую-то константу, но это будет очень примерно и в зависимости от кучи условий будет изменяться
Изменено: evgeniygeo - 27.09.2022 09:51:20
 
Цитата
написал:
Narmer,
а для чего данная информация? слишком долго обновляется?
мне нужно видеть визуально в ячейке, сколько остается времени до следующего обновления.
 
Цитата
Narmer написал:
сколько остается времени до следующего обновления.
или до запуска макроса? т.е. Ваши 15 секунд?
 
Цитата
написал:
Цитата
Narmer написал:
сколько остается времени до следующего обновления.
или до запуска макроса? т.е. Ваши 15 секунд?
15 сек это для примера поставил, это интервал между каждым последующим автообновлением,
изначально автоматически запускается макрос на обновление страницы, лист обновился, начинается обратный отчет 15 сек до следующего обновления, процесс обратного отчета времени до следующего обновления нужно вывести в ячейку для визуализации остатка времени.
Изменено: Narmer - 27.09.2022 10:21:29
 
двойной клик по ячейке с временем
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
двойной клик по ячейке с временем
да да, именно так и должно быть, но в моем случае таймер должен быть привязан к макросу в моем файле, и еще процесс должен быть зациклен, т.е. таймер стартует после каждого последующего автообновления.
Изменено: Narmer - 27.09.2022 11:06:17
 
а в примере не зациклено? (на бесконечный цикл)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
а в примере не зациклено? (на бесконечный цикл)
получается что наверное нет, видео прилагаю,
а можете Ваш макрос законнектить к моему макросу, а то я в этом мало что разбираюсь:

Sub UpdateCell()
   ActiveWorkbook.RefreshAll
   Application.OnTime Now + TimeValue("00:00:15"), "UpdateCell"
End Sub

Не получается видео файл приложить, сделал скрин
Изменено: Narmer - 27.09.2022 11:23:02
 
Narmer,
он уже зациклен........
это
Код
MsgBox "ReFresh"

на это
Код
ThisWorkbook.RefreshAll
Изменено: evgeniygeo - 27.09.2022 11:25:00
 
))
откройте файл
двойной клик по ячейке с временем
через 15 сек - сообщение
нажали Ок
через 15 сек - сообщение
нажали Ок
через 15 сек - сообщение
нажали Ок
...
что не так?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
написал:
))
откройте файл
двойной клик по ячейке с временем
через 15 сек - сообщение
нажали Ок
через 15 сек - сообщение
нажали Ок
через 15 сек - сообщение
нажали Ок
...
что не так?
но мне надо, чтобы этот процесс происходил в автоматическом режиме, без "нажали Ок", без рук ))
Изменено: Narmer - 27.09.2022 11:28:44
 
см. сообщение 12
закомментируйте MsgBox "ReFresh"
раскомментируйте ThisWorkbook.RefreshAll
Изменено: Ігор Гончаренко - 27.09.2022 11:35:37
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
del
Изменено: evgeniygeo - 27.09.2022 11:37:54
 
Цитата
написал:
см. сообщение 12
закомментируйте  MsgBox "ReFresh"
раскомментируйте  ThisWorkbook.RefreshAll
Добрый человек, просто не представляешь как ты мне помог ), всё работает отлично ).
Остался один момент, посмотрел код, но не пойму, как изменять время таймера?
 
Narmer,
86400 - количество секунд в сутках
 
Цитата
написал:
Narmer,
86400 - количество секунд в сутках
Ок, теперь полный комплект ), БЛАГОДАРЮ ОТ ВСЕЙ ДУШИ! )
15 сек    16 / 86400
30 сек    31 / 86400
......
Изменено: Narmer - 27.09.2022 12:23:45
 
Вариант Игоря Гончаренко, синхронизированный с часами
Код
Sub DecCell()
  Static t As Date
  DoEvents
  If t - Now > 0 Then
    tmRg = t - Now
    Application.OnTime Now + 2 / 86400, "DecCell"
  Else
    MsgBox "ReFresh"
    tmRg = 20 / 86400
    t = Now + tmRg    
    DecCell
    'ActiveWorkbook.RefreshAll
  End If
End Sub
Изменено: testuser - 27.09.2022 15:38:30
 
Цитата
написал:
Вариант Игоря Гончаренко, синхронизированный с часами
Код
    [URL=#]?[/URL]       1  2  3  4  5  6  7  8  9  10  11  12  13  14      Sub   DecCell()        Static   t   As   Date        If   t - Now > 0   Then          tmRg = t - Now          Application.OnTime Now + 2 / 86400,   "DecCell"        Else          MsgBox   "ReFresh"          tmRg = 20 / 86400          t = Now + tmRg          DoEvents          DecCell          'ActiveWorkbook.RefreshAll        End   If    End   Sub   
 
а таймер выводит в ячейку?
 
Narmer, все то же самое, только более строгая привязка ко времени
 
Цитата
написал:
или так

Еще так можно

ActiveSheet.ListObjects(1).Refresh
Изменено: testuser - 27.09.2022 16:11:21
Страницы: 1
Наверх