[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『指定時刻にメッセージを表示する』(まんまだよ)
次のマクロは、現在時刻から20秒後に時間を表示するマクロを実行しますが、 指定日時になったら、メッセージを表示したいのです。
'指定日時 → sheet1のA1セルの【2008/11/22 8:15:00】と比較
'こんな例は、作らなくても既にあるでしょうか? あればそれを教えて下さい。せいぜい10個くらい登録出来ればいいのですが。
Sub OnTimeSamp1() '---現在時刻から5秒後に マクロ OnTimeTest を実行します '---実行できない場合には現在時刻から20秒後まで待機します
Application.OnTime EarliestTime:=Now + TimeValue("00:00:05") _ , Procedure:="OnTimeTest", LatestTime:=Now + TimeValue("00:00:20")
MsgBox Format(Now + TimeValue("00:00:20"), "hh:mm:ss") & _ "に処理を実行します" End Sub Sub OnTimeTest() MsgBox Format(Now, "hh:mm:ss") & "スケジュールの時間です!" End Sub
繰り返し処理を汎用的に出来るように以前作ったプロシジャーです。試してみてください。
新規ブックにて
標準モジュール(Module1)に繰り返し処理管理モジュール
'====================================================================== Private exetm As Variant '次の実行時刻 Private lmcnt As Long '繰り返し回数 Private ccnt As Long '現在の実行回数 Private reptm As Variant '実行間隔時間 Private prcnm As String '実行プロシジャー名 Sub mc_schedule(ByVal on_off As Boolean, _ Optional ByVal limit_cnt As Long = 0, _ Optional ByVal rep_time As Variant, _ Optional ByVal proc_name As String, _ Optional ByVal F_Exetm As Variant) 'マクロ実行のスケジュールの設定を行う 'input : on_off --- true スケジュール設定 false---スケジュール解除 ' limit_cnt 実行を繰り返す回数 -1の場合は、制限なく繰り返す ' rep_time 実行間隔時間 ' proc_name 実行するプロシジャー名 ' F_Exetm 初回実行時間 省略すると、現在の時刻+実行間隔時間 On Error Resume Next If on_off = True Then reptm = rep_time If limit_cnt <> -1 Then lmcnt = limit_cnt ccnt = 0 End If If IsMissing(F_Exetm) Then exetm = Now() + reptm Else exetm = F_Exetm End If prcnm = proc_name
End If Application.OnTime EarliestTime:=exetm, Procedure:="mc_exec", Schedule:=on_off On Error GoTo 0 End Sub '====================================================================================== Sub mc_exec() 'スケジュール設定されたプロシジャーを実行する Dim wk As Variant wk = Application.Run(prcnm) ccnt = ccnt + 1 If lmcnt = 0 Or ccnt < lmcnt Then Call mc_schedule(True, -1, reptm, prcnm) End If End Sub
別の標準モジュールに(Module2)に繰り返し対象プロシジャー
'================================================================= Sub repeat_proc() Call mc_schedule(True, 10, TimeValue("00:00:05"), "OnTimeTest") End Sub '================================================================== Sub OnTimeTest() MsgBox Format(Now, "hh:mm:ss") & "スケジュールの時間です!" End Sub
これで repeat_proc を実行してみてください。
5秒間間隔で OnTimeTest を10回実行します。
ichinose
マクロ”OnTimeTest”がみつかりません。とエラーします。
Sub mc_exec の wk = Application.Run(prcnm)が黄色になってエラーですが、 どこがいけないでしょうか?
> 別の標準モジュールに(Module2)に繰り返し対象プロシジャー > '================================================================= > Sub repeat_proc() > Call mc_schedule(True, 10, TimeValue("00:00:05"), "OnTimeTest") > End Sub > '================================================================== > Sub OnTimeTest() > MsgBox Format(Now, "hh:mm:ss") & "スケジュールの時間です!" > End Sub としましたが
マクロ”OnTimeTest”がみつかりません。とエラーします。 >Sub mc_exec の wk = Application.Run(prcnm)が黄色になってエラーですが、 どこがいけないでしょうか?
これは、標準モジュールに OnTimeTestという名前のプロシジャーが存在しないことを意味します。 再度確認してみてください。
ichinose
ichinoseさんすみません、私の単純な間違いだった様です。動作しました。 私のやりたいのは、以下の様にするみたいです。 以下のパラメータでは、2件のメッセージを表示します。 大変済みませんが、日付まで指定する事は出来るでしょうか?
'================================================================= Sub repeat_proc() Call mc_schedule(True, 1, , "OnTimeTest1", TimeValue("23:14:00")) Call mc_schedule(True, 1, , "OnTimeTest2", TimeValue("23:15:00")) End Sub '================================================================== Sub OnTimeTest1() MsgBox Format(Now, "hh:mm:ss") & "スケジュール1の時間です!" End Sub
Sub OnTimeTest2() MsgBox Format(Now, "hh:mm:ss") & "スケジュール2の時間です!" End Sub(まんまだよ)
当初と御質問内容が違うということですか?
>私のやりたいのは、以下の様にするみたいです。 が額面どおりなら、
Sub repeat_proc() Application.OnTime TimeValue("23:14:00"), "OnTimeTest1" Application.OnTime TimeValue("23:15:00"), "OnTimeTest2" End Sub
Sub OnTimeTest1() MsgBox Format(Now, "hh:mm:ss") & "スケジュール1の時間です!" End Sub
Sub OnTimeTest2() MsgBox Format(Now, "hh:mm:ss") & "スケジュール2の時間です!" End Sub
これで済みますけどねえ!!
>日付まで指定する事は出来るでしょうか?
これは、本日が 2008/11/25で 2008/11/27の8:00:00に実行するように設定したい
ということですか?
もし、そうならその間、PCは起動され続け、且つ、Excelも開いていなくてはなりませんが・・・。
↑こういう仕様なら、タスクスケジューラを使用したほうが良いと思います。
いずれにせよ、私には、はっきりなさりたい事が把握できません。
ichinose
上記の「標準モジュール(Module1)に繰り返し処理管理モジュール」部分を、
私の仕事で使うマクロに組み込みたいのですが、何か問題はありますでしょうか。
また、可能であれば、何かクレジット等を表示した方がよいでしょうか。
自分のマクロは、まだ動作を確認しながらの作成中です。
もしも組み込みが駄目であれば、今から作り替えようと考えています。
回答方よろしくお願いいたします。
seki3
>何か問題はありますでしょうか。 いいえ、問題はありません。 汎用的に作成したつもりのプログラムですから色んな事象で 使われるとその完成度が増しますから、採用できるなら使って見てください。
>また、可能であれば、何かクレジット等を表示した方がよいでしょうか。 その必要もありません。
但し、不具合等が発生した場合、御自分でコードを修正し、対応できた場合でも その顛末をここで投稿してください。これは、お願いですが・・・。
ichinose
回答有り難うございます。
使わさせて頂きます。
但し、不具合等が発生した場合、御自分でコードを修正し、対応できた場合でも その顛末をここで投稿してください。これは、お願いですが・・・。 了解しました。
なお、本日も動作をさせていますが、今のところ問題は出ておりません。
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.