У меня есть лист Excel со следующим макросом. Я бы хотел зацикливать это каждую секунду, но, черт возьми, я могу найти функцию для этого. Разве это невозможно?
Sub Macro1()
'
' Macro1 Macro
'
Do
Calculate
'Here I want to wait for one second
Loop
End Sub
DoEvents
как показаноApplication.Wait(Now + #0:00:01#)
чище : Ура!Application.Wait (Now + TimeValue("0:00:01"))
Application.wait(now + 1e-5)
секунду,Application.wait(now + 0.5e-5)
полсекунды и т. Д.Добавьте это в свой модуль
Или для 64-битных систем используйте:
Назовите это в своем макросе так:
источник
Sleep()
позволяет указать время ожидания менее 1 секунды.Application.Wait
иногда бывает слишком гранулированным.Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
Вместо того, чтобы использовать:
я предпочитаю:
потому что после этого читать намного легче.
источник
у меня это работает безупречно. вставьте любой код до или после цикла «делать до». В вашем случае поместите 5 строк (time1 = & time2 = & "do until" loop) в конец внутри цикла do
источник
Timer
потому что этотTimer
подход не работает незадолго до полуночи.Объявление Sleep в kernel32.dll не будет работать в 64-битном Excel. Это было бы немного более общим:
источник
Просто очищенная версия кода clemo - работает в Access, в котором нет функции Application.Wait.
источник
Timer
дает количество секунд, прошедших с полуночи, то этот подход не работает, если он выполняется непосредственно перед полуночью (т.sngEnd
Е. Когда> = 86 400). В полночьTimer
сбрасывается до 0 и, таким образом, остается меньше, чемsngEnd
навсегда.Большинство представленных решений используют Application.Wait, которое не учитывает время (в миллисекундах), уже прошедшее с момента начала текущего подсчета секунд, поэтому они имеют внутреннюю неточность до 1 секунды .
Подход с использованием таймера - лучшее решение , но вы должны учитывать сброс в полночь, поэтому вот очень точный метод сна с использованием таймера:
ИСПОЛЬЗУЙТЕ ЭТО ДЛЯ ПРОВЕРКИ ЛЮБОЙ ФУНКЦИИ СНА: (открыть окно немедленной отладки: CTRL + G)
источник
Application.Wait Second(Now) + 1
источник
источник
Вот альтернатива сну:
В следующем коде я заставляю мигать эффект «свечения» на кнопке вращения, чтобы направлять пользователей к нему, если у них «проблемы», использование «сна 1000» в цикле не привело к видимому миганию, но цикл работает отлично.
источник
я сделал это, чтобы ответить на проблему:
источник
Я обычно использую функцию таймера, чтобы приостановить приложение. Вставьте этот код в свой
источник
Timer
дает количество секунд с полуночи, то этот подход не работает, если он выполняется непосредственно перед полуночью (то есть так, чтоT0
меньше, чем количество секунд задержки от полуночи). В полночьTimer
сбрасывается на 0 до того, как будет достигнут предел задержки.Delay
никогда не достигает предела задержки, поэтому цикл выполняется бесконечно.Loop Until Delay >= 1
, иначе вы рискуете превысить 1 и никогда не выйти из цикла.Функции ожидания и сна блокируют Excel, и вы не можете ничего делать, пока не закончится задержка. С другой стороны, задержка цикла не дает вам точного времени ожидания.
Итак, я сделал это обходное решение, объединив немного обеих концепций. Он повторяется до тех пор, пока время не станет нужным вам.
Вам просто нужно позвонить в Waste10Sec, где вам нужна задержка
источник
Попробуй это :
источник
Вы можете использовать Application.wait now + timevalue ("00:00:01") или Application.wait now + timeserial (0,0,1)
источник