[[20081122082014]] 『指定時刻にメッセージを表示する』(まんまだよ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『指定時刻にメッセージを表示する』(まんまだよ)
 次のマクロは、現在時刻から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
 


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


ichinoseさま

回答有り難うございます。
使わさせて頂きます。

但し、不具合等が発生した場合、御自分でコードを修正し、対応できた場合でも その顛末をここで投稿してください。これは、お願いですが・・・。 了解しました。
なお、本日も動作をさせていますが、今のところ問題は出ておりません。

コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.