web-dev-qa-db-ja.com

VBAにはThread.Sleep()に相当するものがありますか

Access VBAにThread.Sleep()に相当するものはありますか?

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

次の構文を使用して、スリープ機能を呼び出します。

Sub Sleep()
Sleep 1000 'Implements a 1 second delay
End Sub 
62
Otávio Décio

Kernel32を使用しない別の方法:

Dim started As Single: started = Timer

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

コードを機能させるには、いくつかの修正が必要です。以下のコードは修正されたバージョンです。

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

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

Excelを待機させる残りの方法はすべて、Excelが完全に応答しなくなるという結果になります。レスポンシブUIを確保しながらExcelを待機させるソリューションは、待機する秒数でこのwait Subを呼び出すことです。

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

Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)を使用すると、オブジェクトモジュールでこのエラーが発生する場合があります。

enter image description here

その場合、プライベートとして宣言できます。

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

2
Tony L.

私はこれをExcelで使用し、うまく機能しています:

_Application.Wait DateAdd("s", 1, Now())
_

DateAdd()は、Now()(この場合-引数として他の値を使用できます)に関連して時間を設定する関数です。_"s"_は時間測定(この場合は秒)です、増分は1です。したがって、ここでは、関数呼び出しはアプリケーションに1秒待機するように指示しています。

DateAdd関数の使用の詳細については、も参照してください。

2
Gaffi

Access VBAからExcel Wait()プロシージャを使用できます。

最初のステップは、Excelライブラリがプロジェクトから参照されるようにすることです。

それが完了すると、次のコードが10秒間待機するようになります:

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

追加中

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

お役に立てれば :)

1