例えば、ブックを閉じるボタン「×」をクリックすると、
変更させれている場合は、「○○○.xlsへの変更を保存しますか?」という
メッセージが表示されます。
このとき、[キャンセル]ボタンがクリックされたことを判断するするには、
次のような方法があります。
まず、
Public myFlag As Boolean
のようなグローバル変数を定義して、念の為にFalseを
どこかで代入して初期化しておきます。
そして、ブックが閉じるときに実行される
次のイベントプロシージャを作成します。
Private Sub Workbook_BeforeClose(Cancel As Boolean)
myFlag = True
End Sub
この場合、ブックが閉じられればそれで問題ありませんが、
キャンセルボタンが押されてブックが閉じられなかった時には
myFlagにはTrueが格納されたまま残ります。
つまり、このmyFlagがTrueのときには、ユーザーが
ブックを閉じようとしたけれどやっぱりやめた
というように判断が可能です。
[×]ボタンでExcelを終了するイベントは
ApplicationオブジェクトのWorkbookBeforeCloseイベントを
利用します。この方法だと、マクロがないブックで×ボタンを
クリックされた場合にも対処できますが、使い方はちょっと
むずかしいです。
MSサポートの[XL97]Excel 97 のイベントについて
http://www.microsoft.com/mscorp/worldwide/japan/support/kb/articles/j028/5/63.htm
にイベントに関する情報があります。
具体的にはつぎのようなコードになります。
・標準モジュール
Dim X As New Class1
Sub InitializeApp()
Set X.App = Application
End Sub
・クラスモジュール(Class1)
Public WithEvents App As Application
Private Sub App_WorkbookBeforeClose _
(ByVal Wb As Excel.Workbook, Cancel As Boolean)
:(ここに処理を記述します)
End Sub
注意しなければならないのは、変数Xが有効な間しかイベントを
取得できないということです。エラー発生などで変数が破棄されると
イベントが取得できなくなります。
|