プロが教える店舗&オフィスのセキュリティ対策術

ヘルプには次のように記述がありますが、指定時刻に
実行させるプロシージャーの取り消しはサンプルの手順
で動作しますが、何秒後・・・を指定した場合のサンプル
はうまく取り消せません。"実行時エラー '1004'"と
なります。

この場合、どのように記述すればいいのでしょうか?

使用例
次の使用例は、現在から 15 秒後に my_Procedure を実行します。

Application.OnTime Now + TimeValue("00:00:15"), "my_Procedure"
次の使用例は、午後 5 時に my_Procedure を実行します。

Application.OnTime TimeValue("17:00:00"), "my_Procedure"
次の使用例は、前の使用例で設定した OnTime メソッドの設定を取り消します。

Application.OnTime EarliestTime:=TimeValue("17:00:00"), _
Procedure:="my_Procedure", Schedule:=False

A 回答 (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型を使いませんでした。
    • good
    • 0
この回答へのお礼

ありがとうございました。助かりました。

>なお、m_Now 変数の型は、なぜ、Variant か意味が分りますか?Date型を使いませんでした。

うーん、よくわかりませんが・・・
If Not IsEmpty(m_Now) Then
の評価と関係しているような気がします。

お礼日時:2006/01/22 14:08

こんにちは。


Wendy02です。

>うーん、よくわかりませんが・・・
>If Not IsEmpty(m_Now) Then
>の評価と関係しているような気がします。

そうです。私は、Date型で0では、設定されたか分らないからだと考えたからです。設定されていないのに、OnTimeメソッドをクリアしてもしょうがないですからね。正しいかはどうかは別として、私の工夫は、Variant 型は、0 と Emptyの区別がありますので、それに着目しました。
    • good
    • 0
この回答へのお礼

なるほど、そういうことでしたか・・

ありがとうございます。

また、よろしくお願いします。

お礼日時:2006/01/23 14:51

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています