Excel VBAでアプリケーションを閉じる方法
- 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イベントを使っても アプリケーションも閉じる方法を教えてください。
- qwert123da
- お礼率100% (47/47)
- オフィス系ソフト
- 回答数4
- ありがとう数4
- みんなの回答 (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が残ってしまいます。この問題は、何年も解決はしていません。
その他の回答 (3)
- watabe007
- ベストアンサー率62% (476/760)
>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
お礼
ActiveWorkbook.Close SaveChanges:=True ではなく、ThisWorkbook.Saveにすればいいのですね。 理由も教えてくれてありがとうございました。
- keithin
- ベストアンサー率66% (5278/7940)
こんばんは。 Private Sub Workbook_BeforeClose(Cancel As Boolean) Application.Quit ActiveWorkbook.Close SaveChanges:=True End Sub としておくとOKです。もちろん保存も出来てます。
お礼
ActiveWorkbook.Close SaveChanges:=True Application.Quit を逆にしたらうまくできました! ありがとうございました。
- chayamati
- ベストアンサー率41% (254/607)
[ActiveWorkbook.Close SaveChanges:=True]により次のステップが 無効になっています。 Sub ボタン1_Click() Application.Quit End Sub
お礼
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
- ベストアンサー
- その他MS Office製品
- 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つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?
- 締切済み
- Visual Basic
- 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
- 締切済み
- Visual Basic
- 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
- ベストアンサー
- Excel(エクセル)
- 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 宜しくお願いします。
- ベストアンサー
- Visual Basic
- エクセルのマクロを有効にしないと表示しないようにする方法
エクセルでマクロを有効にしないと、シートが表示されないように設定したいのですが、下記の様に(ほかの方の投稿から)入力すると三行目がエラーになります。素人なので、よくわかりません。どのようにしたら、マクロを有効にしないと全てのシートを表示しないようにできるのでしょうか? ご教授いただけますでしょうか 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
- 締切済み
- その他(業務ソフトウェア)
お礼
ご回答ありがとうございました。