• ベストアンサー

Excelの終了処理について

Excel がMDIで複数のワークブックが動作しています。 そして、ExcelのXマークを押して終了する場合の処理についてです。 いま、aaa.xls とbbb.xlsが同時に起動しています。ExcelのXマークで全部閉じるボタンを押します。 aaa.xls のWorkbook_BeforeClose で終了処理をします。 その後bbb.xls(マクロなし)で、保存しますかのダイアログがでますが そこで、キャンセルを行った場合、aaa.xlsは終了せずに残ってしまいます。 すでに、aaa.xlsは終了処理で、メニューの戻しやデータのクリアがおこなわれているのでその後、整合性が合わなくなります。 Excelの終了処理は、どのような手順を踏めばよいのでしょうか。 基本的な質問で申し訳ありませんが、宜しくお願いします。

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

  • ベストアンサー
  • myRange
  • ベストアンサー率71% (339/472)
回答No.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 '------------------------------------------------- 以上です。  

ytommy007
質問者

お礼

ご回答ありがとうございます。 Workbooks.Countを使う方法を理解できました。 いただいたソースと似た処理としました。 どうもありがとうございます。

その他の回答 (2)

  • Wendy02
  • ベストアンサー率57% (3570/6232)
回答No.2

こんにちは。 メインになるブックからメニュー設定などが組み込まれるようになっているようですが、これは、ロジックの組み立ての問題ではありませんか?Excelのバージョンの関係もありますから、はっきり決めることは出来ないけれども、ロジックの組み立てから、直さないといけないと思います。 >1.マクロを実行したいXLSのみ保存後終了 >2.他のXLSは、ユーザのアクションに任せる。 >  つまり、a.保存を選んだら保存され終了する >      b.保存しないを選んだら保存されないで終了する >      c.キャンセルを選んだら、終了をキャンセルする。 >       この場合、マクロ実行しているxlsは終了している。 何度も、ご質問を読み直してみましたが、メインにあるブックのマクロを閉じてまで、動くマクロなどありえないと思うのです。(厳密には、少しズレがありますが)ただ、バージョンによるかもしれませんが、上記の「c」を選択したら、その時点で、マクロの流れから離れて、アプリケーションの本来の働きに戻るはずです。 そうしたくなければ、マクロを動かす母体のモジュールは、アドインや個人用マクロブックに別に置いてやらないといけないように思います。

ytommy007
質問者

お礼

回答ありがとうございます。 アドインや個人用マクロブックから勉強しなおす必要があるようです。 そこから勉強しなおします。

  • hige_082
  • ベストアンサー率50% (379/747)
回答No.1

結局、どのような終了処理がしたいのでしょうか? 一例です '終了するのみ(保存もなし、ダイアログも出ない) 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 終了処理」でググってみては? 希望のものがあると思うけど

ytommy007
質問者

お礼

ご回答ありがとうございました。 やりたいことは、 1.マクロを実行したいるXLSのみ保存後終了 2.他のXLSは、ユーザのアクションに任せる。   つまり、a.保存を選んだら保存され終了する       b.保存しないを選んだら保存されないで終了する       c.キャンセルを選んだら、終了をキャンセルする。        この場合、マクロ実行しているxlsは終了している。 です。 基本的な質問と思いますが、何卒宜しくお願いします。

関連するQ&A

専門家に質問してみよう