|
こんにちは、現在組んでいるマクロで、ブックのbeforecloseイベントにおいて、フラグ(グローバル変数)の値がTrueだった時にMsgBoxを出す処理を入れてます。
これがそのブックを閉じる操作の場合は期待通りの動作をするのですが、Excelを終了する時にはMsgBoxを出さずに終わってしまいます。
デバッガで見たところ、beforecloseの中でのフラグの値はFalseになっていました。
実はこの現象の要因と思われる条件が1つあります。
この要因が無ければExcel終了時でもMsgBoxが表示されました。
言葉で説明するよりサンプルコードを見ていただいた方が早いと思うので、以下に挙げます。
-----(標準モジュール)------
Public Flag As Boolean
Sub test()
Flag = True
Do While True
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + 1
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime '(当然実際はここでもっと違う処理を行う)
DoEvents
Loop
End Sub
-----------------------------
-----(ThisWorkbookモジュール)------
Private Sub Workbook_BeforeClose(Cancel As Boolean)
if Flag then MsgBox "End..."
End Sub
-----------------------------
testを実行してから、ブックを閉じようとした場合はMsgBoxが表示されますが、Excelを終了させようとした時は表示されません。
また前述のように、例えばtestのDoループ部分を削除してFlagの値をTrueにした後に、Excelを終了しようとした時は、MsgBoxが表示されました。
どういう経緯でこのような現象が起きるのか分かる方いらっしゃるでしょうか?
また、上記Doループがある時でも期待するような動作を実現するための解決案がありましたらご教授ください。
よろしくお願いします。
|
|