すぐに役立つエクセルVBAマクロ集 すぐマク
すぐに役立つ Excel VBA マクロ集 Excel VBA Macro
FAQ
Google
 
Home |  What's New! |  Gallery |  Introduction |  Service |  Profile 500連発・組み方講座フォロー Big Color Pallet
[広告]
Excel VBA Macro
Excel DownLoad
© 1997 - 2007
永井善王.
All RightsReserved.
HappyTech & Co., Ltd.
www.happy500z.com
Excel VBA Macro ・ 開始終了 ・ FAQ
翌日の指定時刻にマクロを自動実行するには?
Question 48.7 開始終了 Previous Next
待望の「500連発第2弾」がSAS便で届きました。ロンドン駐在の者で Excel 97を使っています。
詳細は こちら サンプルマクロ012の「現在より一定時間後にマクロを実行する」というのを Auto_Openに取り込み、下記のように作りました:
Sub Auto_Open()
    Set_Macro1 = TimeValue("07:30:00")
    Set_Macro1WAIT = TimeValue("00:00:10")
    Application.OnTime TimeValue(Set_Macro1), "Macro1", TimeValue(Set_Macro1WAIT)
'
    Set_Macro3 = TimeValue("16:30:00")
    Set_Macro3WAIT = TimeValue("00:00:10")
    Application.OnTime TimeValue(Set_Macro3), "Macro3", TimeValue(Set_Macro3WAIT)
'
    Set_Timer_Clock = Now + TimeValue("00:30:00")
    Set_Timer_ClockWAIT = TimeValue("00:00:15")
    Application.OnTime TimeValue(Set_Timer_Clock), "Auto_Open", _
        TimeValue(Set_Timer_ClockWAIT)
'
    Range("AC4").Value = "Timer OK"
    Range("AD4").Value = Now
End Sub
Auto_Openがうまくいくと、セルにタイムスタンプを打つように設定し、初めはマクロ3後にその15時間後の翌日7時半のマクロ1を走らせたいのですがうまくいきませんでした。昨日は待ち時間を30分ごとに設定して実験してみましたが、23時59分でマクロがとまってしまうのです。
日付をこす特別な書き方があるのでしょうか? どうしてもマクロが日付をこして実行できずにいます。ワークブックを閉じずにこのマクロを実行させるのに悩んでいます。
どうか、ご教授お願いいたします。
Answer   Copyright (C) 2001.8.31 永井善王
500連発第2弾をご活用いただき、うれしいです。

012番のマクロが使っている OnTimeメソッドは、Visual Basicのヘルプによると「指定された時刻 (特定の
時、または特定の期間の経過後) にプロシージャを実行します」となっています。

OnTimeメソッドの構文
expression.OnTime(EarliestTime, Procedure, LatestTime, Schedule)

これで明らかなように引数 EarliestTime に、'
' と '時' を指定すれば日付越えが可能になります。
ところが、012番のサンプルでは、引数 EarliestTime に 「TimeValue(指定時刻)」と '時' だけ指定しているので、日付の判断がされません。24時をまたいで仕事することは少ないようなので、一般的なサンプルにしてあります。

では、'
'を指定するには、どうすればよいかですが、例えば、
    指定日時 = DateValue("2001/08/31") + TimeValue("07:30:00")
のように、DateValue関数(下記参照)を組み合わせます。

あなたのマクロはホボ出来上がっていると思いますので、上記の点を修正してみてください。このマクロを稼動させるには通常、一晩中、パソコンの電源を入れっぱなしにしておく必要があります。

OnTimeメソッドの引数
EarliestTime プロシージャを実行する時刻。バリアント型の値を使用する。必須。
Procedure  実行するプロシージャ名。文字列型 の値を使用する。必須。
LatestTime  プロシージャを実行できる最終時刻。省略するとプロシージャが実行できるまで待つ。バリアント型の値。
Schedule   新しいOnTimeプロシージャを設定するならTrue、直前のプロシージャの設定解除ならFalse。省略可能。

DateValue関数
構文 DateValue(date)
引数 date は必須で、日付を表す文字列式(100年1月1日から 9999年12月31日まで)を指定。日付と時刻の両方、あるいは和暦で指定することも可能。
できました!
もう感動ものです。
テストで成功したので、これからメインマシンに設定していって明日の朝をまちます。どうかうまく行きますように。
テストMACROは:
Sub Auto_Open()                                    
   |
   |(前略)
   |
Dim myDate As Date
    myDate = DateValue(Now() + 1)
    Application.OnTime TimeValue("07:00:00") + (myDate), "Auto_Open"
'
    Range("AC4").Value = "Timer OK"
    Range("AD4").Value = Now
End Sub
明日の朝になると結果がでますので楽しみです。 テストで何度もうまくいっているので(ローカルマシン上で時間の設定を変えて日付越えは確認済み)。その後もちゃんと続けてマクロは順調に走っています。
すごく嬉しいです。ありがとうございました。

Click here to visit our sponsor