アプリ版:「スタンプのみでお礼する」機能のリリースについて

Excel VBA を使い、下記「Owari」をセットしたボタンを押すと、
開かれているExcelデータ を保存することなく、完全にCloseし、
Excel自体が完全に消えることを目的にしています。

Sub Owari()
Workbooks("ABC.xlsm").Close SaveChanges:=False
Application.Quit
End Sub

ところが、実行すると、確かに ABC.xlsm は消えるのですが、
Excel は残ったままです。
Excel が完全に消えて Windows のメイン画面にしたいのですが、
どこが間違いなのでしょうか。

A 回答 (3件)

解答は既に出ていますが、この件は、かなり前から知っている割には、そういう現象だというしか認識ありませんでした。

だから、Close と Quit の順番を逆にするということだけで、終わらせていました。

Excel2003ぐらいまでは、こんな問題は、クローズアップされることがありませんでしたから。
今まで、2003のコードでは順調に終了できていたものが、2007以降ではできないので、気がついたからです。何か違いがあるのかもしれません。

#2さんのモーグのサンプルコードのように、あくまでも、Closeメソッドを発生させないで、Saveでつないでいき、最後に、Application.Quit と入れる方法は、Microsoft 推奨のようです。

'//
Sub myQuit_TEST()
Dim wb As Workbook
 For Each wb In Workbooks
  If Not (wb Is ThisWorkbook) Then
   If wb.Saved = False Then wb.Save '保存
    wb.Close False
  End If
 Next
  '自ブックの保存します
  If ThisWorkbook.Saved = False Then ThisWorkbook.Save
  Application.Quit
End Sub
'///

Closeメソッドで、その後のコードがすべてが破棄されるわけではなく、ThisWorkbook モジュール側のBeforeCloseイベントはExcel側で受け取っていますね。
だから、

'ThisWorkbook モジュール
Private Sub Workbook_BeforeClose(Cancel As Boolean)
 Application.Quit
End Sub

このように、最後にQuit を入れてあげても終わることが出来るはずです。

参考にした所は、[Application.Quitの誤解]
http://www.asahi-net.or.jp/~ef2o-inue/vba_o/sub0 …
    • good
    • 0
この回答へのお礼

助かりました

ありがとうございました。書き忘れたので申し訳なかったのですが、Excel は2013で、Windows 7 で動かしています。よくわかりました。助かりました。

お礼日時:2015/06/15 07:21

既に、No1の方が詳しく説明されています。


別案として
http://www.moug.net/tech/exvba/0150079.html
にある
Sub QuitSamp2()
Application.DisplayAlerts = False '---確認メッセージ非表示
Application.Quit '---Excelを終了します
End Sub

複数のエクセルファイルを開いていても対応しますが
全て、上書き保存はされません。
    • good
    • 1

"Close"と"Quit"の順番ですね。



sub Owari()
Application.Quit
Workbooks("ABC.xlsm").Close SaveChanges:=False
End Sub

"Close"が先だと、後の部分が実行されません。
    • good
    • 0

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

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A