プロが教えるわが家の防犯対策術!

ブック(ファイル)だけじゃなくて
アプリケーションも閉じたいのですが

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Close SaveChanges:=True
End Sub

としたのですが、実際閉じるのはブックだけでアプリケーションは開いたままです。

「ウインドウを閉じる」を押して、ブックだけが閉じるのはわかるのですが
図のようにアプリケーション閉じるボタンを押してもウインドウ(ブック)しか閉じません。

Private Sub Workbook_BeforeClose(Cancel As Boolean)
ActiveWorkbook.Close SaveChanges:=True
Application.Quit
End Sub

にしても結果は同じです。

しかし、Workbook_BeforeCloseイベントがないファイルなら、
アプリケーション閉じるボタンを押しても全て終了できます。

Workbook_BeforeCloseイベントを使っても
アプリケーションも閉じる方法を教えてください。

「アプリケーションも閉じたいのですが」の質問画像

A 回答 (4件)

[ActiveWorkbook.Close SaveChanges:=True]により次のステップが


無効になっています。

Sub ボタン1_Click()
Application.Quit
End Sub
    • good
    • 0
この回答へのお礼

ActiveWorkbook.Close SaveChanges:=True
をすると、それ以降は無効になるのですか。知りませんでした。

シートのボタンを押してからのイベントなら、

Private Sub CommandButton1_Click()
Application.Quit
ActiveWorkbook.Close SaveChanges:=True
End Sub

ですべて保存できますが、

Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Quit
ActiveWorkbook.Close SaveChanges:=True
End Sub

で、アプリケーションの×ボタンやウインドウの×ボタンを押して閉じようとしても
アプリケーションが残ってしまいます。

お礼日時:2012/10/20 10:53

こんばんは。



Private Sub Workbook_BeforeClose(Cancel As Boolean)
Application.Quit
ActiveWorkbook.Close SaveChanges:=True
End Sub
としておくとOKです。もちろん保存も出来てます。
    • good
    • 0
この回答へのお礼

ActiveWorkbook.Close SaveChanges:=True
Application.Quit
を逆にしたらうまくできました! ありがとうございました。

お礼日時:2012/10/20 10:56

>Private Sub Workbook_BeforeClose(Cancel As Boolean)


> ActiveWorkbook.Close SaveChanges:=True
> Application.Quit
>End Sub

>アプリケーションは開いたままです。
Application.Quitか実行される前にActiveWorkbook.Close してるんだから当然では

試してみて
Private Sub Workbook_BeforeClose(Cancel As Boolean)
  ThisWorkbook.Save
  Application.Quit
End Sub
    • good
    • 0
この回答へのお礼

ActiveWorkbook.Close SaveChanges:=True
ではなく、ThisWorkbook.Saveにすればいいのですね。

理由も教えてくれてありがとうございました。

お礼日時:2012/10/20 10:58

こんばんは。



この現象は、ずいぶん前から関わっています。
私の話は、ここでは該当しないかもしれませんが、少し加えておきます。

ActiveWorkbook.Close SaveChanges:=True
  は、#3さんご指摘のように、
ThisWorkbook.Close SaveChanges:=True
でしょう。

もしくは、
最初に、一旦保存した後に、
For Each w In Workbooks
 If Not w Is Thisworkbook Then
  w.Close False
 End if
Next w
Thisworkbook.Close False
Application.Quit '←これを、Thisworkbook.Close の前に置くこともアリ

私の場合と同じだとは言いませんが、Excel 2007/ 2003で、いろいろ試していましたが、未だ、こちらは解決していません。そんなに単純ではないかもしれません。

http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
井上さんが、ここでお書きになっています。彼のサンプルも試してみましたが、うまく行っていません。

井上さんも書いていますが、#2さんの方法は、昔から知られています。Quitメソッドは、Application に予約する、というのですが、そうは行っていません。私の場合は、シートの部分はなくなって、フレームが残ってしまいます。正確には、本体(Application) と、ADDINが残ってしまいます。この問題は、何年も解決はしていません。
    • good
    • 0
この回答へのお礼

ご回答ありがとうございました。

お礼日時:2012/11/03 19:17

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!