Страницы: 1
RSS
Функция задержки времени
 
Использую в своем макросе вот такую функцию задержки времени      
Код
PauseTime = B   
    Start = Timer   
    Do While Timer < Start + PauseTime   
    DoEvents   
    Loop   
    Finish = Timer   
    TotalTime = Finish - Start 
   
При переходе временной отметки 00.00.00. макрос перестает работать..  
Можно ли в Биосе остановить время на 00.00.01 или еще какие нибуди варианты, что б в полночь макрос не останавливался?  
Спасибо!
 
Нужно приостановить работу макроса? Вот такой вариант приостановит на 10 секунд:  
Application.Wait Time:=Now + TimeValue("0:00:10")
 
Наоборот... нужно что б он в полночь не останавливался.... когда наступает 00.00.00.  
 
Длительность выполнения макроса более 24 часов....
 
Не совсем понимаю, почему макрос останавливается в полночь? Он должен работать, пока не выполнит свою миссию. Или, пока не наступит какое-то событие, по которому ему предназначено остановиться.
 
Все верно - мой макрос непрерывно исполняет свою миссию более 24 часов (т.е. минимум один раз на часах биос неизбежно будет 00.00.00)  
 
В макросе прописана выше описанная функция задержки    
К примеру закрашивает ячейки последовательно через каждые 20 секунд - а надо закрасить всего к примеру миллион.... Вот как только время в компьютере становится 00.00.00 - он останавливается  - не докрасив требуемое количество ячеек.  
Вижу выход остановить часы  - на 00.00.01 или нет?
 
Откуда Ваш макрос узнаёт, что наступил переход суток? Ну, наступил - и что? Пусть продолжает себе трудиться  :-)  
Для примера следующий макрос:    
Код
Public Флаг As Boolean   
Sub Запуск()   
Флаг = True   
Dim x As Double   
Do   
'Для примера макрос что-то делает на листе -   
'каждую секунду прибавляет единичку в ячейку А1   
x = x + 1   
Cells(1, 1) = x   
Application.Wait Time:=Now + TimeValue("0:00:01")   
DoEvents   
Loop While Флаг   
Exit Sub   
End Sub   
   
Sub Кнопка1()   
Флаг = False   
End Sub   

Будет трудиться до тех пор, пока не нажмём на Кнопку1  
И ему глубоко безразлично - какое сейчас системное время. Или Вы что-то недоговариваете...
 
> Вижу выход остановить часы  
 
Оставьте в покое часы :)  
Действительно, функция Timer возвращает секунды текущих суток, и в полночь возвращает 0. Вам уже дважды привели решение с функцией Now, которая возвращает текущую дату+время, эта величина непрерывно увеличивается.  
Я бы еще добавил в цикл функцию WaitMessage, с ее использованием процессор не грузится на 100%:  
 
Код
Private Declare Sub WaitMessage Lib "user32" ()   
   
Sub bb()   
Dim d   
d = Now + #12:00:05 AM# 'константа 5 секунд, вводить #0:0:5#   
Do While Now < d   
    DoEvents   
    WaitMessage   
Loop   
MsgBox "прошло 5 сек"   
End Sub
 
А эти примеры приемлемы к такой задержки - 0,05 секунд?  
именно доли секунд используются....
 
А проверить нет возможности?  
P.S. Сначала писали, что 20 секунд :-)
 
Вот так?  
 
Application.Wait Time:=Now + TimeValue("0:00:B")  
 
B = 0,05  
(B - Я долженн вводить с ТехстБокса)
 
> А эти примеры приемлемы к такой задержки - 0,05 секунд?  
 
Нет. Now обновляется 1 раз в секунду. Для малых временнЫх интервалов следует использовать Timer, он обновляется примерно 100 раз в секунду. И не использовать WaitMessage.  
Чтобы застраховаться от ситуации, когда полночь попадает в интервал, можно использовать конструкцию Int(Now)+Timer/86400# - это Now, но с сотыми долями секунд.  
 
=90009=
Страницы: 1
Читают тему
Наверх