2011-02-02 105 views
4

Excel 2003でタスクや類似アイテムを追跡するためのカレンダーを作成しました。 VBAを使用してタイマーを設定する必要があります。このような何か:Excel VBAの時間アラーム

run_in_x_secs (timetowait, function to exec) 

は、Excel VBAでそれを行う方法はありますか、私は試してみて、コマンドラインから実行し、VBAからそれを実行するためのアラームを見つける必要があります。

どうすればよいですか?

+0

http://visualbasic.about.com/od/learnvba/a/vbatiming1.htm –

答えて

3

これはトリックを行う必要があります:あなたは、時間の長い期間を待つためにそれを設定することになるだろう場合は特に、のOnTimeで少し注意する必要がありますが

Public Sub RunSubInXSeconds(secondsToWait As Long, nameOfFunction As String) 
    Application.OnTime Now + secondsToWait/(24# * 60# * 60#), nameOfFunction 
End Sub 

を例えば...タイマーの有効期限が切れてSubが実行される前にブックを閉じると、ワークブックを開いて実行することができます。あなたがそれを期待していない場合、混乱する!

+0

これは、Excelアプリケーションがまだ実行されている場合にのみ発生します。 – froeschli

+0

これは、OnTimeをスケジュールし、コールバックを実行する前にブックを閉じると発生しますが、**アプリケーションを開いたままにします。 Excelをハックしてファイルを再オープンするのは面白い方法です! –

+0

素晴らしいサイモン。それが望ましい動作です。私のユーザーはそれがExcelファイルであることを知らず、自分のボタンだけを使用します。 (そして、私の閉じるボタンは、アプリケーションではなくワークブックを閉じます) –

3
Public Sub tt() 

timerset = TimeValue("01:00:00") 'the time you want 
Application.OnTime timerset, "myfun" 

End Sub 

Sub myfun() 
'do whatever you want 
End Sub 
+0

あなたはできるだけ早く私はそれが絶対時間であることがわかったとして、(あまりにも素晴らしい作品)。 Thnx –

+0

@Diego申し訳ありませんが、私はそれを言及するのを忘れました。ボアソート! –

2

さらに2つのオプション:

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

Sub Sleep() 
Sleep 1000 'whait 1 second 
End Sub 

'Option 2 
Sub MyWaitMacro() 
    newHour = Hour(Now()) 
    newMinute = Minute(Now()) 
    newSecond = Second(Now()) + 3 
    waitTime = TimeSerial(newHour, newMinute, newSecond) 
    Application.Wait waitTime 
End Sub