|
▼foo さん:
こんばんは。
>こんにちは、現在組んでいるマクロで、ブックのbeforecloseイベントにおいて、フラグ(グローバル変数)の値がTrueだった時にMsgBoxを出す処理を入れてます。
>
>これがそのブックを閉じる操作の場合は期待通りの動作をするのですが、Excelを終了する時にはMsgBoxを出さずに終わってしまいます。
現象、確認しました。Excel2002 SP-3では、foo さんが記述されたとおりに
コードを実行し、操作すると変数が初期化されてしまいます。
Excel終了ボタンをクリックすると、testというプログラムも
終了してしまいますねえ!!
データの保持は方法も考えられますが
(もっとも、foo さんの事象に適合するしないの問題は別ですが)
testが終了してしまうのは致命的です。
方法としては、作業用ブック(仮にBook1)の
Thisworkbookモジュールに
Public Flag as boolean
と宣言しておいて、実際はBook1は非表示に設定しておきます。
>
>-----(標準モジュール)------
>Public Flag As Boolean
>
>Sub test()
Workbooks("book1").Flag= True
>
Do While Workbooks("book1").Flag=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 Workbooks("book1").Flag then MsgBox "End..."
>End Sub
>-----------------------------
>
なんてすると、値(Workbooks("book1").Flag)は保持されます。
よって、BeforeCloseイベントでメッセージは表示されます。
繰り返しますが、プロシジャーが終了してしまうのは、問題ですけどね!!
こうすれば、セルに保存する時の問題はクリアできるとは思いますが・・。
この現象は、要チェックですね!!
|
|