VBAでファイルを保存せずに閉じた後の他ブックの挙動

このQ&Aのポイント
  • エクセル2000(SP3)で複数のブックを起動し、片方のブックを保存せずに終了させると、他のブックの操作ができなくなる問題について質問です。
  • 他のアプリケーションが起動している場合に限り、一度他のアプリケーションを選択してから再度Excelを選択すると、他のブックの操作が可能になります。
  • ファイルを保存せずに終了させるためのマクロのコードを示しています。
回答を見る
  • ベストアンサー

VBAでファイルを保存せずに閉じた後の他ブックの挙動

初めて質問させていただきます。 VBA初心者の為、質問自体に不足があるかもしれませんが、ご協力をお願い致します。 エクセル2000(SP3)で複数のブック(仮にA.xls,B.xlsとします)を起動した状態で、Aをマクロを使って保存せずに終了させたところ、Bの操作が出来なくなります。(セル選択等もできません。Bのsheetを選択するとアプリケーションエラーになってしまいます) 同Windows上に他アプリケーションが起動している場合、それらを一度選択してから再度Excelを選択すると、Bの操作が可能になります。 保存せずに終了させる為のマクロは次のとおりです。 ブックAのThisWorkbook内に記述しています。 Private Sub Workbook_BeforeClose(Cancel As Boolean) If Workbooks.count = 1 Then Application.DisplayAlerts = False Application.Quit Else ThisWorkbook.Close SaveChanges:=False End If End Sub 以上、よろしくお願い致します。

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

  • ベストアンサー
  • end-u
  • ベストアンサー率79% (496/625)
回答No.1

Workbook_BeforeCloseイベントはClose『前』に実行されるイベントで、 そのイベント実行後に、何もしなくてもBookはCloseします。 (イベント内でCancel = True にしなければ) イベント内で >ThisWorkbook.Close を記述してしまうと、そのCloseメソッドによって、 またBeforeCloseイベントを呼び出してしまいます。 >ThisWorkbook.Close は不要です。というより記述してはいけません。 保存せずに閉じる場合は Savedプロパティ を True にしてあげれば 「保存しますか?」のメッセージは表示されません。 Private Sub Workbook_BeforeClose(Cancel As Boolean)   If Workbooks.Count = 1 Then     Application.DisplayAlerts = False     Application.Quit   Else     ThisWorkbook.Saved = True     'ThisWorkbook.Close SaveChanges:=False   End If End Sub

5dogs_fuji
質問者

お礼

早速のご回答、本当にありがとうございます。 イベント名の通りの挙動でしたね。 ご指摘のとおりClose記述をコメントアウトしたところ、期待通りの動作が確認できました。

関連するQ&A

  • Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい

    Excel VBA ブックが本当に閉じられた時だけ別のブックを閉じたい A.xls B.xls と二つのブックがあります。 A.xlsが閉じられる時、B.xlsも同時に閉じたいです。 A.xlsに以下のマクロを入れました。 Private?Sub?Workbook_BeforeClose(Cancel?As?Boolean) ?Workbooks("B.xls").Close?SaveChanges:=False End?Sub 問題はA.xlsが保存してない場合、「A.xlsへの変更を保存しますか?」というメッセー ジが 出てきますが、そこでキャンセルを押された場合でもB.xlsが閉じられてしまいます。 A.xlsが本当に閉じられた時だけB.xlsを閉じたいのですが そのようなことは可能でしょうか?

  • エクセル・ブック共有のファイル終了時に

    エクセルのVBA、万年初心者のものです。m(__)m エクセルのファイルをネットワーク上で「ブックの共有」で使いたいと思っているのですが、「ブックの共有」をオンにしていると、終了時に毎回「この場所に○○.xlsという名前のファイルが既にあります。置き換えますか?」と出てきます。 ファイル自体はマクロを有効にしていて、毎回、置き換える必要がないので「いいえ」しか選ばないので、なんとか、このメッセージをださないようにしたいのですが。 ThisWorkbook のPrivate Sub Workbook_BeforeClose の中に、Application.DisplayAlerts = False を入れてみたりしましたが、うまくいきません。 なにかいいメソッドがないでしょうか?

  • ファイルの別名保存の方法

    こんにちは。 Excelの素人です。blg.を参考に、ファイルの別名保存ボタンを作りましたが、別名保存後うまく終了してくれません。 現象は終了マクロから名前をつけて保存してもファイルが終了しません。もう一度ボタンをクリックするといきなり終了します。 素人の悲しさで、どこを修正すればよいのか悩んでいます。 Sub 別名保存後終了() If ThisWorkbook.Saved = False Then strFilename = ThisWorkbook.Path & "\" & _ "データ作成" & "_" & _ Format(Date, "yyyymmdd") & ".xls" strFilename = Application.GetSaveAsFilename( _ FileFilter:="Excelファイル,*.xls", _ InitialFileName:=strFilename, _ Title:="Excelファイルの保存") If strFilename = "False" Then If MsgBox("保存せずに終了します。よろしいですか?", _ vbOKCancel + vbInformation, _ "終了確認") = vbOK Then ThisWorkbook.Saved = True ThisWorkbook.Close Else Exit Sub End If Else ActiveWorkbook.SaveAs strFilename End If Else ThisWorkbook.Close End If End Sub 宜しくお願いします。

  • 他のブックのマクロを呼び出すと他のブックの画面がアクティブになってしまう。

    エクセルのツールバーにボタンを2つ作って他のブック1,2のマクロをそれぞれ割り当てました。 エクセルの表を開いておいてツールバーから マクロ1(編集・出力)を呼び出すとブック1がアクティブになってしまい真っ白のシートが見えてしまいます。 もう一方のブック2のマクロ2はフォームを表示するマクロですがそちらはバックに隠れています。 以前同様にシート上のCH(13)を消すマクロを使っていた時もバックに隠れていました。 Application.ScreenUpdating = Falseを入れましたが一瞬ですがやはりアクティブになります。 見た目も悪いので表示したくないし、ブック1と2で動作が違う理由がわかりません、 マクロ1はこれです。 ブック1のcreateというマクロを使うのが目的です。 Sub Output() Application.ScreenUpdating = False Call create MsgBox "完了しました。" ThisWorkbook.Close End Sub マクロ2 Sub Form_Open() Frm_Form1.Show vbModeless End Sub つまらない質問ですが気になるのでよろしくお願いします。

  • VBAで指定したブックを前面に表示するには

    ブックAとブックBがあります。 ブックAのマクロの途中、InputBoxでブックBのセルを選択させて 処理終了後に再びブックAを前面に表示するには どうしたら良いでしょうか? 下記コードを実行したところ、 ブックBが前面になって終了してしまいます。 InputBoxの挙動が関係している気がするのですが、原因がわかりませんでした。 ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー Sub テスト() '※このマクロはブックAに書かれてます Dim rng As Range On Error Resume Next Set rng = Application.InputBox( _ Prompt:="ブックBのセルを選択してください。", _ Type:=8) On Error GoTo 0 If rng Is Nothing Then Exit Sub '~ '~ ここで処理をする '~ MsgBox "処理完了" ThisWorkbook.Activate 'ここでブックAを前面に出したい End Sub ーーーーーーーーーーーーーーーーーーーーーーーーーーーーーー ExcelはOffice365(バージョン 1902)です。 よろしくお願いします。

  • エクセル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つ目を'でコメント状態にしてあるので保存可)にすると保存できなくて困っています。 二つを有効にした時はどのようにほぞんすればいいですか?

  • 他のブックに現在のデータを日付をつけて保存したい

    WinXP Excel2003でマクロを作っている超初心者です。90%完成しましたが、次のことで止まっています。 1)Aブックのユーザーホームに、BコマンドボタンとCコマンドボタンがあります。    Aブック→Bコマンドボタン→Bブック開く→入力→Aブックのコマンドボタンで保存        →Cコマンドボタン→Cブック開く→入力→Aブックのコマンドボタンで保存 2)Aブックのコマンドボタンからではなく、エクセルを起動し、Bブックを開き、「今日の日付をつけて新規ブックに保存」のマクロを作りました。 コードは次のとおりでした。 Sub ブック名に現在の日付を付加して保存GH() 'Windows環境なのでEnviron関数を使ってみる Dim strFileName As String Dim strSavePath As String Dim intRe As Integer Application.DisplayAlerts = False ActiveWorkbook.Save strSavePath = Environ("HOMEPATH") strSavePath = strSavePath & "\デスクトップ\総務\請求\データ保存用" If Dir(strSavePath, vbDirectory) = "" Then MkDir (strSavePath) End If strFileName = strSavePath & "\GH請求" & Format(Date, "yyyymmdd") & ".xls" If Dir(strFileName) <> "" Then MsgBox "このGH請求書を保存し、同時に「データ保存用」の中にも保存しました。。" Else ThisWorkbook.SaveAs Filename:=strFileName End If If intRe = vbNo Then Exit Sub If intRe = vbYes Then ActiveWorkbook.SaveAs Filename:=strFileName End If Application.DisplayAlerts = True Application.Quit End Sub  無事に今日の日付でBブックが保存できました。 3)今度は、Aブックから、→Bコマンドボタン→Bブック開く→Aブックのコマンドボタンで「今日の日付をつけて新規ブックに保存」のマクロを実行しました。すると、保存先にはAブックが保存されていました。AブックでなくBブックのデータを保存したいのに・・・。 4)なぜ、Bブックが保存されないのでしょうか? Bブックを保存するにはどうしたらよろしいでしょうか。

  • EXCELブックを保存しないで終了

    EXCEL2000で"A"というブックから"B"というブックを マクロのVBAから開きます。 両方のシートが開いた状態から,"B"のマクロより 両方のブック共に保存しないで、EXCEL自体終了するマクロ を"B"側に下のような感じで作成しました。 -------- EXCEL終了処理 ------------------ Application.DisplayAlerts = False ThisWorkbook.Saved = False Application.Quit ---------------------------------------- これで終了しようとすると、「"B"のブックを保存しますか?」というメッセージが表示されてしまいます。終了前のマクロ処理の中で"B"ブックを変更しているので、このようなメッセージが表示されると思うのですが、 Application.DisplayAlerts = False 命令は利かないのですか? どなたか教えて下さい。宜しくお願い致します。

  • (VBA)ブックを閉じるプログラム

    表題の通りで、マクロを使ってブックを閉じるプログラムが作りたいです。 具体的には、 "終了"というボタンを作って、このボタンを押したときのみ変更を保存せずに、ブックを閉じる。 右上のXマークを押して閉じようとした場合は、"終了ボタンで終了して下さい"とメッセージを 表示させて、必ず終了ボタンで閉じる。 のようなプログラムです。 ネットで調べ、みよう見まねでプログラムを組んでみましたが、完全にブックが消えません。 また×ボタンを押した場合にブックを閉じない様にするプログラムが分かりません。 <組んでみたプログラム> Sub test2() Application.DisplayAlerts = False Workbooks("Book1.xls").Close Application.DisplayAlerts = True End Sub ご教授お願い致します。

  • Excel VBAでのSaveCopyAsの挙動

    Excel 2016/2019を使っています。よろしくお願いします。 ブックに変更があった場合にバックアップを保存したいので、 上書きにならないように日付と連番をつけてバックアップ専用フォルダにSaveCopyAsを使って保存しようとしています。 明示的に「保存」アイコンをクリックすると期待通りの動作が行われます。しかし、保存せずに「x」印をクリックして閉じてしまった場合でも、変更があるならバックアップファイルを作りたいのですが、SaveCopyAsを通っているのにバックアップファイルが作成されません。 記載したコードは以下のとおりです。 ThisWorkbookオブジェクトに対して、 Public Sub Workbook_beforeClose(Cancel As Boolean) '変更があれば(ThisWorkBookを)保存 If ThisWorkBook.Saved = False Then ThisWorkBook.Save End If End Sub 'ThisWorkBookの保存時にバックアップを作成 Private Sub Workbook_BeforeSave(省略) If ThisWorkbook.Saved = False Then 'バックアップファイルのフルパスを作成  ThisWorkbook.SaveCopyAs "バックアップファイルフルパス" End Sub 何かヒントをお持ちの方みえられましたらご教示いただければ幸いです。