- 締切済み
VBAのOnTimeの停止について
下記コードで右上の×ボタン(エクセルアプリではなくbookを閉じる×です)でCLOSEした場合は停止されるのですが、 ThisWorkbook.Closeで閉じた場合MsgBox "timer cxl"は呼ばれるのですがタイマーがキャンセルできず10秒後に閉じたbookが勝手に開かれMsgBox "chk"が呼ばれてしまいます。 エクセルは2003、WIN10です。 どなたか何か原因や回避策があればご教授お願い致します。 //標準モジュール Public timer As Date Public timerFlag As Boolean Sub chk() timerFlag = False MsgBox "chk" End Sub //ThisWorkbook Private Sub Workbook_Open() timer = Now + TimeValue("00:00:10") timerFlag = True Application.OnTime timer, "chk" MsgBox "open" End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) If timerFlag Then Application.OnTime timer, "chk", , False MsgBox "timer cxl" End If MsgBox "close" End Sub
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kagakusuki
- ベストアンサー率51% (2610/5101)
回答No.1です。 閉じた時に、 MsgBox "timer cxl" を出さない様にするのを忘れておりました。 ThisWorkbook.Close の前に付ける構文を If timerFlag Then Application.OnTime timer, "chk", , False ではなく If timerFlag Then Application.OnTime timer, "chk", , False timerFlag = False End If に変えて、 If timerFlag Then Application.OnTime timer, "chk", , False timerFlag = False End If ThisWorkbook.Close として下さい。 同様にSub QNo9248380_VBAのOnTimeの停止について_0()に関しても以下の様にして下さい。 Sub QNo9248380_VBAのOnTimeの停止について_0() If timerFlag Then Application.OnTime timer, "chk", , False timerFlag = False End If ThisWorkbook.Close End Sub
- kagakusuki
- ベストアンサー率51% (2610/5101)
>回避策があれば ThisWorkbook.Close で閉じる場合には、そのThisWorkbook.Closeの前に必ず If timerFlag Then Application.OnTime timer, "chk", , False を付けて If timerFlag Then Application.OnTime timer, "chk", , False ThisWorkbook.Close の様にされては如何でしょうか? 或は、 //標準モジュール Sub QNo9248380_VBAのOnTimeの停止について_0() If timerFlag Then Application.OnTime timer, "chk", , False ThisWorkbook.Close End Sub などとしておいて、 ThisWorkbook.Close で閉じる代わりに Call QNo9248380_VBAのOnTimeの停止について_0 を使って閉じる様にされては如何でしょうか?
お礼
ご回答ありがとうございます。 確かにThisworkbook.Closeの前にすべてタイマー解除を挟めば回避できますね。 実際のコードが様々なところでClose処理をしていて、できればイベントでまとめて処理できればと考えておりました。 もうちょっと調べて原因が判明しなければこの方法でいかせていただきたいと思います。ありがとうございました。