Подтвердить что ты не робот

Есть ли эквивалент Thread.Sleep() в VBA

Есть ли эквивалент Thread.Sleep() в Access VBA?

4b9b3361

Ответ 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)