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

37 Johnno Nolan [2009-01-22 17:32:00]

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

vba access-vba sleep


8 ответов


56 Решение Otávio Décio [2009-01-22 17:36:00]

Declare Sub Sleep Lib "kernel32" Alias "Sleep" _
(ByVal dwMilliseconds As Long)

Используйте следующий синтаксис для вызова функции "Сон":

Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub 

7 DontFretBrett [2011-10-18 02:27:00]

Другой способ без использования kernel32:

Dim started As Single: started = Timer

Do: DoEvents: Loop Until Timer - started >= 1

6 Zorba Eisenhower [2010-11-10 17:44:00]

Для того, чтобы код работал, требуется несколько поправок. Код ниже - исправленная версия.

Declare Sub Sleep Lib "kernel32" Alias "Sleep" (ByVal dwMilliseconds As Long)

Sub SleepVBA() 
Sleep 1000 'Implements a 1 second delay 
End Sub 

5 The Data Brewer [2014-01-16 21:59:00]

Все остальные методы, чтобы заставить Excel ждать результата в Excel, становятся полностью невосприимчивыми. Решение для ожидания Excel при обеспечении гибкого пользовательского интерфейса - это ожидание Sub с количеством секунд ожидания.

    Sub Wait(seconds As Integer)
      Dim now As Long
      now = Timer()
      Do
          DoEvents
      Loop While (Timer < now + seconds)
    End Sub

2 user3298002 [2014-02-11 19:16:00]

Можно использовать процедуру Excel Wait() из Access VBA.

Первый шаг - убедиться, что на библиотеку Excel ссылаются ваши проекты.

Когда это будет сделано, следующий код будет работать в ожидании десяти секунд:

Call Excel.Application.Wait(Time:=DateAdd("s",10,Now()))

2 Gaffi [2012-03-01 20:15:00]

Я использую это в Excel, и он отлично работает:

Application.Wait DateAdd("s", 1, Now())

DateAdd() - это функция, которая устанавливает время относительно Now() (в этом случае - вы можете использовать другие значения в качестве вашего аргумента), "s" - это мера времени (в данном случае секунд), а increment равно 1. Таким образом, вызов функции сообщает приложению, чтобы он подождал 1 секунду.

См. также для более подробной информации об использовании функции DateAdd.


1 Tony L. [2016-12-01 19:18:00]

Если вы используете Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long), вы можете получить эту ошибку в объектном модуле.

введите описание изображения здесь

Если это так, вы можете объявить его закрытым:

Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)


1 sebastien leblanc [2011-10-20 20:57:00]

Добавление

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

надеюсь, что это поможет:)