|
こんばんは。
>>>>40秒待機して文字を表示し、次は20秒待機して文字を表示、次は1分待機したら
>>>
>>>規則性があるかないかで、コードは変わってきます。
>>>Waitで待機させることがヒントになりませんか?
>>
>あれからいろいろと試してみたのですが、waitで毎回待機させると動作がとても重くなってしまいます。
>重くならないようにできるようであればご教授お願いいたします。
>waitを使うとプログラム的に重くなってしまうのでしょうか?
Application.Waitは、タスクマネージャーでCPUの使用率を
調べてみればわかりますが、このメソッド実行中の使用率が100%になってしまいます。
ですから、ループコード内で高い頻度で使用するとPCのマルチタスクとしての動作は
鈍くなりますよね!!
ユーザーフォームをモーダルモードで使用する場合に一定時間待機させる場合は、
私は、次に方法をとっています。
新規ブックにユーザーフォームを作成してください(Userform1)。
このUserform1には、二つのコマンドボタンを配置してください
(Commandbutton1 、 Commandbutton2)。
標準モジュールに
'============================
Sub main()
UserForm1.Show
End Sub
'Userform1のモジュールに
'=============================================================
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
'=======================================================================
Private Sub CommandButton1_Click()
Sleep 60000
MsgBox "60秒待機しました"
End Sub
'========================================================================
Private Sub CommandButton2_Click()
Dim tm As Date
tm = Now() + #12:01:00 AM#
Do Until Now() > tm
DoEvents
Sleep 300
Loop
MsgBox "60秒待機しました"
End Sub
APIのSleepはCPUの占有率が低いです。
Commandbutton1 、Commandbutton2 と二つの例を試してみてください。
私は、CommandButton2の方法を使うことが多いですが、
ケースバイケースでしょう。
|
|