• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:OnTimeの取り消しについて)

OnTimeの取り消しについて

このQ&Aのポイント
  • 指定時刻に実行させるプロシージャーの取り消しはうまく動作しない
  • 実行時エラー '1004'となる
  • 取り消しの方法についての記述はない

質問者が選んだベストアンサー

  • ベストアンサー
  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.1

こんばんは。 サンプルを作ってみました。 このように、共通の時刻を、モジュール・スコープの変数を置けばよいかと思います。 これは、サンプルですから、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型を使いませんでした。

noname#27115
質問者

お礼

ありがとうございました。助かりました。 >なお、m_Now 変数の型は、なぜ、Variant か意味が分りますか?Date型を使いませんでした。 うーん、よくわかりませんが・・・ If Not IsEmpty(m_Now) Then の評価と関係しているような気がします。

その他の回答 (1)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 Wendy02です。 >うーん、よくわかりませんが・・・ >If Not IsEmpty(m_Now) Then >の評価と関係しているような気がします。 そうです。私は、Date型で0では、設定されたか分らないからだと考えたからです。設定されていないのに、OnTimeメソッドをクリアしてもしょうがないですからね。正しいかはどうかは別として、私の工夫は、Variant 型は、0 と Emptyの区別がありますので、それに着目しました。

noname#27115
質問者

お礼

なるほど、そういうことでしたか・・ ありがとうございます。 また、よろしくお願いします。

関連するQ&A