Есть ли эквивалент Thread.Sleep()
в Access VBA?
Есть ли эквивалент Thread.Sleep() в VBA
Ответ 1
Declare Sub Sleep Lib "kernel32" Alias "Sleep" _
(ByVal dwMilliseconds As Long)
Используйте следующий синтаксис для вызова функции "Сон":
Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub
Ответ 2
Другой способ без использования kernel32:
Dim started As Single: started = Timer
Do: DoEvents: Loop Until Timer - started >= 1
Ответ 3
Для того, чтобы код работал, требуется несколько поправок. Код ниже - исправленная версия.
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
Sub SleepVBA()
Sleep 1000 'Implements a 1 second delay
End Sub
Ответ 4
Все остальные методы, чтобы заставить Excel ждать результата в Excel, становятся полностью невосприимчивыми. Решение для ожидания Excel при обеспечении гибкого пользовательского интерфейса - это ожидание Sub с количеством секунд ожидания.
Sub Wait(seconds As Integer)
Dim now As Long
now = Timer()
Do
DoEvents
Loop While (Timer < now + seconds)
End Sub
Ответ 5
Я использую это в Excel, и он отлично работает:
Application.Wait DateAdd("s", 1, Now())
DateAdd() - это функция, которая устанавливает время относительно Now()
(в этом случае - вы можете использовать другие значения в качестве вашего аргумента), "s"
- это мера времени (в данном случае секунд), а increment равно 1. Таким образом, вызов функции сообщает приложению, чтобы он подождал 1 секунду.
См. также для более подробной информации об использовании функции DateAdd
.
Ответ 6
Можно использовать процедуру Excel Wait() из Access VBA.
Первый шаг - убедиться, что на библиотеку Excel ссылаются ваши проекты.
Когда это будет сделано, следующий код будет работать в ожидании десяти секунд:
Call Excel.Application.Wait(Time:=DateAdd("s",10,Now()))
Ответ 7
Добавление
Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)
каким-то образом возникли дополнительные проблемы где-то еще в моем коде. Я закончил использовать эту функцию, которую я нашел на другом форуме, и немного поддразнивал:
Function WaitTime(n As Double)
'Function that wait an amount of time n in seconds
TWait = Time
TWait = DateAdd("s", n, TWait)
Do Until TNow >= TWait
TNow = Time
Loop
End Function
надеюсь, что это поможет:)
Ответ 8
Если вы используете Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
, вы можете получить эту ошибку в объектном модуле.
Если это так, вы можете объявить его закрытым:
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)