Excel VBAでアプリケーションを閉じる方法

このQ&Aのポイント
  • Excel VBAのWorkbook_BeforeCloseイベントを使用して、アプリケーションを閉じる方法を解説します。
  • ブック(ファイル)だけでなく、アプリケーション自体を閉じるためには、Workbook_BeforeCloseイベント内でApplication.Quitメソッドを使用します。
  • しかし、Workbook_BeforeCloseイベントがないファイルの場合、アプリケーションを閉じるボタンを押しても全て終了できます。
回答を見る
  • ベストアンサー

アプリケーションも閉じたいのですが

ブック(ファイル)だけじゃなくて アプリケーションも閉じたいのですが 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イベントを使っても アプリケーションも閉じる方法を教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

こんばんは。 この現象は、ずいぶん前から関わっています。 私の話は、ここでは該当しないかもしれませんが、少し加えておきます。 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/sub05_800_060.html 井上さんが、ここでお書きになっています。彼のサンプルも試してみましたが、うまく行っていません。 井上さんも書いていますが、#2さんの方法は、昔から知られています。Quitメソッドは、Application に予約する、というのですが、そうは行っていません。私の場合は、シートの部分はなくなって、フレームが残ってしまいます。正確には、本体(Application) と、ADDINが残ってしまいます。この問題は、何年も解決はしていません。

qwert123da
質問者

お礼

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

その他の回答 (3)

  • watabe007
  • ベストアンサー率62% (476/760)
回答No.3

>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

qwert123da
質問者

お礼

ActiveWorkbook.Close SaveChanges:=True ではなく、ThisWorkbook.Saveにすればいいのですね。 理由も教えてくれてありがとうございました。

  • keithin
  • ベストアンサー率66% (5278/7940)
回答No.2

こんばんは。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.Quit ActiveWorkbook.Close SaveChanges:=True End Sub としておくとOKです。もちろん保存も出来てます。

qwert123da
質問者

お礼

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

  • chayamati
  • ベストアンサー率41% (254/607)
回答No.1

[ActiveWorkbook.Close SaveChanges:=True]により次のステップが 無効になっています。 Sub ボタン1_Click() Application.Quit End Sub

qwert123da
質問者

お礼

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

関連するQ&A

  • 【Excel】BeforeCloseを毎回呼び出すには?

    終了時に独自で保存をしたいのですが、 下記のコードだと1回目でキャンセルすると 2回目以降の呼び出し時に全く実行されません。 どこか悪いのかご教示ください。 また、もしご存じであれば BeforeClose() と Auto_Close() の違い ThisWorkbook と Me の違い を教えてください。 よろしくお願いいたします。 Private Sub Workbook_BeforeClose(Cancel As Boolean)   Dim iAns As VbMsgBoxResult   iAns = MsgBox("'" & Me.Name & "' への変更を保存しますか?")   Select Case iAns   Case vbYes     Call WriteFile     ThisWorkbook.Close savechanges:=False   Case vbNo     ThisWorkbook.Close savechanges:=False   Case vbCancel     Cancel = True   End Select End Sub

  • Workbook_BeforeClose イベントで

    Win2000Pro SP-4、Office2000 SP-3使用しています。 ExcelVBAのブックを閉じる時のイベントで、オートフィルタの解除と再設定を行い、上書き保存するコードを記述いたしました。 しかし実行後ファイルを開いてみるとオートフィルタの解除だけされており、再設定がされておりませんでした。 上書き保存のコードを省くと再設定されていました。 標準モジュールに同じコードを記述して実行した場合も同様の結果になりました。 解決法がおわかりの方がいらっしゃいましたらお教えくださいませ。 以下のコードをThisWorkbook内に記述しました。 Private Sub Workbook_BeforeClose(Cancel As Boolean)  Application.ScreenUpdating = False    Worksheets(1).AutoFilterMode = False    Range("10:10").AutoFilter    Range("B11").Select    ActiveWorkbook.Close SaveChanges:=True  Application.ScreenUpdating = True End Sub よろしくお願いいたします。

  • 【Excel VBA】 ブッククローズ時の動作について

    環境: WindowsXP Office2003 ThisWorkBookモジュールに、 Private Sub Workbook_BeforeClose(Cancel As Boolean) 'ブックの保存を要求しない ThisWorkbook.Saved = True End Sub と記述しているのですが、保存の有無を聞かれます。 しかしながら、ブックにより聞かれない場合もあります。 原因として考えられるのは、どのようなことでしょうか?

  • エクセルVBAにて保存するとき

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("エクセルを終了してもよろしいですか?", vbYesNo) = vbNo Then Cancel = True Exit Sub End If Application.DisplayAlerts = False Application.Quit End Sub Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean) MsgBox "そのボタンでは保存できません。" & vbCrLf & _ "雛形は残しておきましょう" & vbCrLf & _ "" & vbCrLf & _ "ツールバーの「マクロなし出力」から保存できます。" Cancel = True End Sub という二つのマクロをThisworkbookにいれてあるんですが、 この二つを有効(今は2つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?

  • VBAのOnTimeの停止について

    下記コードで右上の×ボタン(エクセルアプリではなくbookを閉じる×です)でCLOSEした場合は停止されるのですが、 ThisWorkbook.Closeで閉じた場合MsgBox "timer cxl"は呼ばれるのですがタイマーがキャンセルできず10秒後に閉じたbookが勝手に開かれMsgBox "chk"が呼ばれてしまいます。 エクセルは2003、WIN10です。 どなたか何か原因や回避策があればご教授お願い致します。 //標準モジュール Public timer As Date Public timerFlag As Boolean Sub chk() timerFlag = False MsgBox "chk" End Sub //ThisWorkbook Private Sub Workbook_Open() timer = Now + TimeValue("00:00:10") timerFlag = True Application.OnTime timer, "chk" MsgBox "open" End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) If timerFlag Then Application.OnTime timer, "chk", , False MsgBox "timer cxl" End If MsgBox "close" End Sub

  • excelファイルが意図せず起動

    下記を参考にして、起動時にタイマーを設定してexcelファイルを5分後に自動的に 保存・終了するようにしています。 http://okwave.jp/qa/q2911086.html しかし実際5分を待たず、手動でそのexcelファイルを終了した場合、 後でそのexcelファイルが自動で起動して、そのまま終了しているようです。 この症状をなくしたい場合どのように、記述を加えればよいか教えていただけないでしょうか? 記述は下記です。 '標準プロシージャ Public Operated As Boolean Sub SetTimer() Application.OnTime Now + TimeValue("00:05:00"), "CloseMe" End Sub Sub CloseMe() If Operated Then Operated = False SetTimer Exit Sub End If 'ブックの上書き保存 ActiveWorkbook.Save ' 保存確認を避けるため、保存済みにする ThisWorkbook.Saved = True ' 他にブックが開いていなければ、Excelを終了する If Workbooks.Count <= 1 Then Application.Quit ' 本ブックをClose ThisWorkbook.Close False End Sub 'ワークブックプロシージャ Private Sub Workbook_Open() Operated = False SetTimer End Sub Private Sub Workbook_BeforePrint(Cancel As Boolean) Operated = True End Sub Private Sub Workbook_Deactivate() Operated = True End Sub Private Sub Workbook_Activate() Operated = True End Sub Private Sub Workbook_SheetActivate(ByVal Sh As Object) Operated = True End Sub

  • VBAでファイルを閉じる時に、他のエクセルファイルを閉じるには?

    VBAで、 Private Sub Workbook_Open() Workbooks.Open FileName:="バス時刻表.xls",ReadOnly:=True End Sub で、バス時刻表.xlsを自動的にオープンした後、 閉じる時に、 Private Sub Workbook_BeforeClose(Cancel As Boolean) Workbooks("バス時刻表.xls").Close End Sub で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。

  • エクセル/BeforeCloseイベントで保存できない!?

    エクセル2000です。 以下の_BeforeCloseイベントのマクロ(非常に簡略化してますが)ですが、標準モジュールに設定した Sub 終了() ActiveWorkbook.Close End Sub から終了させた場合、ActiveWorkbook.Saveの部分だけが働かないようです。 エクセル画面右上の×で終了させた場合は保存されます。 どうしてでしょうか? Private Sub Workbook_BeforeClose(Cancel As Boolean) With Sheet1 If .Range("A1") <> .Range("B1") Then ret = MsgBox("変更を保存しますか?" _ + Chr(&HD) + Chr(&HA) + "" _ + Chr(&HD) + Chr(&HA) + "新:" & .Range("A1") _ + Chr(&HD) + Chr(&HA) + "旧:" & .Range("B1"), vbYesNo + vbQuestion, " 確認") If ret = vbYes Then ActiveWorkbook.Save '←なぜ保存されないの?! MsgBox "保存しました" ThisWorkbook.Saved = True ActiveWorkbook.Close (False) End If Else ThisWorkbook.Saved = True ActiveWorkbook.Close (False) End If End With End Sub

  • VBA 保存方法を教えて下さい

    Private Sub Workbook_BeforeClose(Cancel As Boolean) If MsgBox("×ボタンは使用できません。" & vbCr & _ "よろしいですか?", vbInformation + vbOKOnly) = vbOK Then Cancel = True End If End Sub 上記の様にEXCELワークブックに記述しましたが、 別に設置した「保存終了ボタン」で終了できなくなってしまいました。 Workbook_BeforeClose が邪魔しているようです。 どうすれば解決できるでしょうか? 「保存終了ボタン」に記述しているコードは下記です。 Sub 保存終了() ActiveWorkbook.Save CommandBars("Worksheet Menu Bar").Enabled = True Application.CommandBars("Standard").Visible = True Application.CommandBars("Formatting").Visible = True Application.CommandBars("Drawing").Visible = True With Application .DisplayFormulaBar = True .ShowWindowsInTaskbar = True End With Application.WindowState = xlMaximized Application.Quit MsgBox "終了します" End Sub 宜しくお願いします。

  • エクセルのマクロを有効にしないと表示しないようにする方法

    エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか Private Sub Workbook_BeforeClose(Cancel As Boolean) Sheets(\"Sheet1\").Visible = False Sheets(\"Sheet2\").Visible = False ActiveWorkbook.Protect Password:=\"error123\" End Sub Private Sub Workbook_Open() ActiveWorkbook.Unprotect Password:=\"error123\" Sheets(\"Sheet1\").Visible = True Sheets(\"Sheet2\").Visible = True Sheets(\"Sheet1\").Select End Sub

専門家に質問してみよう