2017-03-03 7 views
1

私はこのワークブックを持っており、プログラムのように見せたいと思います。 私はまた、特定のコマンドボタンを使用してアプリケーションを終了することができるようにしたいと思っています。私の問題は、ユーザーがこのボタンを通してアプリケーションを終了すると、それはプライベートサブをトリガーするということであるVBAを通じてアプリケーションを閉じる

Sub SAVE_CLOSE 
ActiveWorkbook.Save 
If Workbooks.Count < 2 Then 
Application.Quit 
Else 
ActiveWorkbook.Close 
End If 
End Sub 

Workbook_BeforeClose:ここ

は私が

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
Application.OnKey "{ESC}" 
Cancel = True 
MsgBox "Please use the QUIT button to save and close the database." 
End Sub 

して終了ボタンのを持っているコードですイベントをキャンセルし、終了プロセスをキャンセルします。どうやってこれを修正しますか?

ありがとうございます!

答えて

2

だけBeforeCloseイベントでそのためのボタンハンドラとテストでフラグを設定:...はThisWorkbookで

Public okToClose As Boolean      '<--module level. 

Private Sub Workbook_BeforeClose(Cancel As Boolean) 
    If Not okToClose Then 
     Application.OnKey "{ESC}" 
     Cancel = True 
     MsgBox "Please use the QUIT button to save and close the database." 
    End If 
End Sub 

を...と、ハンドラで...

Sub SAVE_CLOSE() 
    ActiveWorkbook.Save 
    ThisWorkbook.okToClose = True 
    If Workbooks.Count < 2 Then 
     Application.Quit 
    Else 
     ActiveWorkbook.Close 
    End If 
End Sub 

ActiveWorkbook.Closeを呼び出すことは避けてください。代わりにハードリファレンスを使用してください。それは誰かの日の仕事の価値を破壊する本当に良い方法です...

+0

ああ、私が入力したものですが、例があります!ニース。 :) – steegness

+0

魅力のように働く!ありがとうございました! – Alex

-1

ブックが閉じようとしているときはいつでも(あなたの方法であろうとなかろうと)、そのメソッド内で何らかの方法が必要になります。それがあなたのボタンであったことを知っています。おそらくグローバル変数、または隠されたシート上の特定のセルの値ですか?

関連する問題