- ベストアンサー
Excelの終了処理について
Excel がMDIで複数のワークブックが動作しています。 そして、ExcelのXマークを押して終了する場合の処理についてです。 いま、aaa.xls とbbb.xlsが同時に起動しています。ExcelのXマークで全部閉じるボタンを押します。 aaa.xls のWorkbook_BeforeClose で終了処理をします。 その後bbb.xls(マクロなし)で、保存しますかのダイアログがでますが そこで、キャンセルを行った場合、aaa.xlsは終了せずに残ってしまいます。 すでに、aaa.xlsは終了処理で、メニューの戻しやデータのクリアがおこなわれているのでその後、整合性が合わなくなります。 Excelの終了処理は、どのような手順を踏めばよいのでしょうか。 基本的な質問で申し訳ありませんが、宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
面白そうなのでちょと実験。。 力業ですが、 閉じる(×)をクリックしたとき自動で表示されるメッセージの代わりに コードで同じようなメッセージを表示させて制御する。 (コード内容) ThisWorkbook以外のブックのみメッセージを表示させ応答はユーザーに任せる。 ThisWorkbookの保存、閉じるはコード側で処理する。 '------------------------------------------------ Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim i As Integer Dim Msg As Integer If Workbooks.Count = 1 Then Exit Sub Application.DisplayAlerts = False For i = Workbooks.Count To 1 Step -1 If Workbooks(i).Name <> ThisWorkbook.Name Then Msg = MsgBox(Workbooks(i).Name & " を保存しますか?", vbYesNoCancel, "確認") If Msg = vbYes Then Workbooks(i).Close True ElseIf Msg = vbNo Then Workbooks(i).Close False End If End If Next i Cancel = True Application.EnableEvents = False ThisWorkbook.Close True End Sub '------------------------------------------------- 以上です。
その他の回答 (2)
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 メインになるブックからメニュー設定などが組み込まれるようになっているようですが、これは、ロジックの組み立ての問題ではありませんか?Excelのバージョンの関係もありますから、はっきり決めることは出来ないけれども、ロジックの組み立てから、直さないといけないと思います。 >1.マクロを実行したいXLSのみ保存後終了 >2.他のXLSは、ユーザのアクションに任せる。 > つまり、a.保存を選んだら保存され終了する > b.保存しないを選んだら保存されないで終了する > c.キャンセルを選んだら、終了をキャンセルする。 > この場合、マクロ実行しているxlsは終了している。 何度も、ご質問を読み直してみましたが、メインにあるブックのマクロを閉じてまで、動くマクロなどありえないと思うのです。(厳密には、少しズレがありますが)ただ、バージョンによるかもしれませんが、上記の「c」を選択したら、その時点で、マクロの流れから離れて、アプリケーションの本来の働きに戻るはずです。 そうしたくなければ、マクロを動かす母体のモジュールは、アドインや個人用マクロブックに別に置いてやらないといけないように思います。
お礼
回答ありがとうございます。 アドインや個人用マクロブックから勉強しなおす必要があるようです。 そこから勉強しなおします。
- hige_082
- ベストアンサー率50% (379/747)
結局、どのような終了処理がしたいのでしょうか? 一例です '終了するのみ(保存もなし、ダイアログも出ない) Sub 終了処理_1() Application.DisplayAlerts = False Application.Quit End Sub 'マクロを実行したブックのみ保存 '他のブックは保存もなし、ダイアログも出ない Sub 終了処理_2() ThisWorkbook.Save Application.DisplayAlerts = False Application.Quit End Sub 'すべてのブック保存後終了 Sub 終了処理_2() Dim i As Integer For i = 1 To Workbooks.Count Workbooks(i).Save Next i Application.DisplayAlerts = False Application.Quit End Sub 「excel 終了処理」でググってみては? 希望のものがあると思うけど
お礼
ご回答ありがとうございました。 やりたいことは、 1.マクロを実行したいるXLSのみ保存後終了 2.他のXLSは、ユーザのアクションに任せる。 つまり、a.保存を選んだら保存され終了する b.保存しないを選んだら保存されないで終了する c.キャンセルを選んだら、終了をキャンセルする。 この場合、マクロ実行しているxlsは終了している。 です。 基本的な質問と思いますが、何卒宜しくお願いします。
お礼
ご回答ありがとうございます。 Workbooks.Countを使う方法を理解できました。 いただいたソースと似た処理としました。 どうもありがとうございます。