タイマー設定をキャンセルするには?

Question 59.6 Previous Next
詳細は こちら 500連発第2弾012番の時間起動のマクロとHPを参考にさせていただいて、下記のようなマクロで30分おきに起動するものを作成しました。
'------------------------------------------------------------------------------
    指定時刻 = TimeValue("09:00:00")
    待ち時間 = TimeValue("00:00:05")  '他のプロシージャが実行中の場合の待ち時間
    For i = 1 To 30
    指定時刻 = 指定時刻 + TimeValue("00:30:00")  '現在時刻より何分後
      Application.OnTime _
         TimeValue(指定時刻), _
         procNM, _
         TimeValue(待ち時間)
    Next i
'------------------------------------------------------------------------------
起動自体はうまくいったのですが、逆に、そのブックを閉じ(Exceを終了することなく)、他のブックを開いて表作成など一般的な作業を行なっていると、指定時刻になると閉じたはずのブックが開き、マクロが実行されてしまいます。

上記のマクロでは、9:00から30分おきに起動させる設定にしており、たとえば、15:00にそのブックを閉じても、15:30になると自動的にそのブックが開いてマクロが実行されてしまいます。これを回避する方法、キャンセルする方法はないでしょうか。
お忙しいところ、申し訳ありませんが、宜しくお願いいたします。
Answer   Copyright (C) 2003.4.10 永井善王
500連発第2弾012番は「現在より一定時間後にマクロを実行する」というサンプルですが、実務に活かしていただいているご様子、うれしいです。
タイマー設定をキャンセルするには、OnTimeメソッドの 4番目の引数 (Schedule) に Falseを設定するコードを実行します。ご提示のコードに当てはめると下記のようになります。

    Application.OnTime TimeValue(指定時刻), procNM, , False

このコードを、設定したときと同様に For...Next で30回ループさせればキャンセルできるかと思います。なお、ブックを閉じたときにキャンセルするようにしたいのであれば、Auto_Closeプロシージャに組み入れればよいでしょう。
さっそくお試しいただき、お手数ですが結果をお知らせください。

お知らせ
・これらマクロのくわしい組み方が、
 拙著「Excel VBA マクロ 組み方講座 Excel97/98/2000/2001/2002/VX対応 」 に掲載されています。
 2003年5月に技術評論社より発売されました。
・500連発第2弾は完売になりましたが、その後に発売された
 「Excel VBA そのまま使える実用マクロ500連発 」の029番に「指定時刻の一定時間後にマクロを実行する」
 として掲載されています。
後日情報
「指定時刻の一定時間後にマクロを実行する」と題するマクロは、2012年3月に出版された下記の本にも掲載されています。
 ・
Excel VBA 実用マクロ 800連発 [中・上級編] の698番

 

Excel VBA Macro