Chrisは、一連のアイテムをユーザーに表示するExcelマクロを開発しています。彼は、表示する各情報の間に、たとえば1秒の遅延をマクロに導入したいと考えており、そのような遅延を追加する簡単な方法があるかどうか疑問に思います。

マクロに遅延を導入する方法はいくつかあります。従来の方法は、Applicationオブジェクトで使用されるWaitメソッドを使用することです。これを使用して、次のように1秒の遅延を導入します。

Application.Wait (Now() + TimeValue("0:00:01"))

Waitメソッドに必要なパラメーターは、マクロの実行を再開する時間であることに注意してください。言い換えれば、それは「待つ」時間です。そのため、上記の例では、(Now関数からの)現在の時刻を1秒ずつインクリメントして使用しています。

(何らかの理由で)Waitメソッドを使用したくない場合は、ループを使用して時間を入札することもできます。

Dim WaitTime As Date

WaitTime = Now() + TimeValue("0:00:01")

Do While Now < WaitTime Loop

このアプローチの変形は、真夜中からの秒数を返すタイマー関数に依存しています。

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint Loop

このようにループを使用する場合、1秒だけ遅延していれば、おそらく大きな問題にはなりません。より長い時間遅延する必要がある場合は、DoEvents関数をループに配置することをお勧めします。

Dim Endpoint as Single

Endpoint = Timer + 1 Do While Timer < Endpoint     DoEvents Loop

理由は単純です。そうしないと、Excelはループ中に他のイベントに応答しません。これにより、待機中にシステムがフリーズまたはハングしたように見える場合があります。

遅延をより細かく(ミリ秒の範囲まで)必要な場合は、WindowsAPIの一部であるスリープ機能を利用することをお勧めします。 (これはVBAの一部ではありません。)これを使用するには、モジュールの先頭の宣言領域で、プロシージャの前に宣言を含める必要があります。

#If VBA7 And Win64 Then     Public Declare PtrSafe Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#Else     Public Declare Sub Sleep Lib "kernel32"(ByVal dwMilliseconds As Long)

#End If

次に、マクロ内で次のようにスリープ機能を使用できます。

Sleep(1000)

これにより、システムが1000ミリ秒(1秒)一時停止します。

_ExcelTips_は、費用効果の高いMicrosoftExcelトレーニングのソースです。

このヒント(5134)は、Microsoft Excel 2007、2010、2013、および2016に適用されます。