「ブックを閉じる」がキャンセルされたことを判断する
 例えば、ブックを閉じるボタン「×」をクリックすると、
変更させれている場合は、「○○○.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が有効な間しかイベントを
取得できないということです。エラー発生などで変数が破棄されると
イベントが取得できなくなります。

Excel97/2000



戻る


Excel Word Access VBA! モーグ