- ベストアンサー
OnTimeの取り消しについて
- 指定時刻に実行させるプロシージャーの取り消しはうまく動作しない
- 実行時エラー '1004'となる
- 取り消しの方法についての記述はない
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
こんばんは。 サンプルを作ってみました。 このように、共通の時刻を、モジュール・スコープの変数を置けばよいかと思います。 これは、サンプルですから、MsgBox を使用していますが、ふつうは必要ありませんね。複数ある場合は、モジュール・スコープの変数を配列にすればよいのではないかと思います。 Dim m_Now As Variant Sub OnTimeRoutine() m_Now = Now() Application.OnTime m_Now + TimeValue("00:00:15"), _ Procedure:="my_Procedure" End Sub Sub my_Procedure() MsgBox Format$(Now, "hh:nn:ss") End Sub Sub OnTimeSettingOff() If Not IsEmpty(m_Now) Then On Error Resume Next Application.OnTime m_Now + TimeValue("00:00:15"), _ Procedure:="my_Procedure", _ Schedule:=False If Err.Number = 0 Then MsgBox "取り消しました。", vbInformation Else MsgBox "取り消しできませんでした。", vbExclamation End If On Error GoTo 0 m_Now = Empty Else MsgBox "設定されていないか、設定が残っていません。", vbInformation End If End Sub なお、m_Now 変数の型は、なぜ、Variant か意味が分りますか?Date型を使いませんでした。
その他の回答 (1)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 Wendy02です。 >うーん、よくわかりませんが・・・ >If Not IsEmpty(m_Now) Then >の評価と関係しているような気がします。 そうです。私は、Date型で0では、設定されたか分らないからだと考えたからです。設定されていないのに、OnTimeメソッドをクリアしてもしょうがないですからね。正しいかはどうかは別として、私の工夫は、Variant 型は、0 と Emptyの区別がありますので、それに着目しました。
お礼
なるほど、そういうことでしたか・・ ありがとうございます。 また、よろしくお願いします。
お礼
ありがとうございました。助かりました。 >なお、m_Now 変数の型は、なぜ、Variant か意味が分りますか?Date型を使いませんでした。 うーん、よくわかりませんが・・・ If Not IsEmpty(m_Now) Then の評価と関係しているような気がします。