• ベストアンサー
  • すぐに回答を!

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を閉じたいのですが そのようなことは可能でしょうか?

共感・応援の気持ちを伝えよう!

  • 回答数1
  • 閲覧数1119
  • ありがとう数30

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

  • ベストアンサー
  • 回答No.1
  • nda23
  • ベストアンサー率55% (773/1384)

イベントが無いので難しいと思います。 代替案として、自力で保存を問い合わせてみては? Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim 文書, 応答 If Not ThisWorkbook.Saved Then     '変更があった場合のみ問い合わせる     文書 = "'" & ThisWorkbook.Name & "'への変更を保存しますか?"     応答 = MsgBox(文章, vbExclamation + vbYesNoCancel)     If 応答 = vbCancel Then         '閉じないようにして終了         Cancel = True         Exit Sub     End If     If 応答 = vbYes Then         '自力で保存する         ThisWorkbook.Save     Else         '保存したことにしてしまう         ThisWorkbook.Saved = True     End If End If ★ここでB.xlsを閉じる End Sub 面倒なので省略しましたが、読み取り専用のブックだと、Saveメソッドで エラーが発生します。エラーハンドリングして回避してください。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

ありがとうございます。 ご提示いただいた内容でバッチリでした。 読み取り専用ブックだった場合は 「読み取り専用です。別名で保存してください。」 のメッセージを表示させて Cancel = True Exit Sub で終わるようにしました。

関連するQ&A

  • Excel VBAで別のブックからユーザーフォームの閉じる

    Excel VBAで別のブックからユーザーフォームの閉じたいのですが うまくいきません。 教えてください。 Private Sub CommandButton2_Click() Application.Visible = False Unload Workbook.("材料リスクマップ検索Ver2.xls")UserForm3・・・・※ Workbooks.Close userform3:=ThisWorkbook.Path & "あああ.xls" Workbooks("\いいい.xls").Close savechanges:=False UserForm1.Show vbModeless End Sub ※印のところが赤字にかわります。 コマンドボタン2は、いいい.xlsにあり、フォームを閉じたいのはあああ.xlsのUserform3です。 その後、ファイル名いいい.xlsは閉じます。 コードが間違っているかと思いますが、どんな風にすればよいかわかりません。初歩的なこととは思いますがよろしくお願い致します。

  • 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 以上、よろしくお願い致します。

  • 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 で記述したら、エラーとなります。 どのようにすればいいのでしょうか? よろしくお願いします。

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

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

  • VBAの更なる応用編

    度々すみません。 VBAで教えて下さい。 主ファイルYYYY.xlsmに下記の記述をしました。 副ファイルXXXX.xlsmがあります。 ------------------------------------------------- Private Sub Workbook_BeforeClose(Cancel As Boolean) On Error Resume Next Workbooks("XXXX.xlsm").Close End Sub Private Sub Workbook_Open() Workbooks.Open Filename:= _ "XXXX.xlsm" Worksheets("Sheet1").Activate End Sub ------------------------------------------------- 以上で、YYYY.xlsmとXXXX.xlsmの場合、主、副の共に保存せずに 終了するにはどのようなコメントを追記したら良いですか。 ネットで調べた下記の内容は場所が悪いのか動作しませんでした。 Sub CloseWorkbook() Workbooks("XXXX").Close SaveChanges:= False End Sub

  • エクセル・エラーを出さずに複数ブックをクローズしたい

    複数のファイルを閉じたいのですが、 Sub 必要ファイルを閉じる() Workbooks("あ.xls").Close SaveChanges:=False Workbooks("い.xls").Close SaveChanges:=False Workbooks("う.xls").Close SaveChanges:=False Workbooks("え.xls").Close SaveChanges:=False End Sub 開いていないファイルがあるとエラーで止まってしまいます。 この4つのファイルに該当するものがあれば、閉じる というマクロを組みたいです。 アドバイス、宜しくお願いします。

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

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

  • vba ブックを変更しないで閉じたい

    ブックを開き、 Sub Macro2() Application.DisplayAlerts = False 'セルをいじる処理(A1に「あ」を入れるなど) '・・・ Windows("ブック1.xls").Activate ActiveWorkbook.Close SaveChanges:=False End Sub を実行すると変更があっても何も表示されないで閉じるはずですが とあるブックのみ、 「'ブック1'を保存しますか?」 はい いいえ キャンセル が出ます。 同じコードをブックに対して行なっているのに、実行できる場合と出来ない場合があるのでしょうか?

  • 【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

  • VBA Auto_Close複数ブックを閉じれない

    Auto_Closeについて教えて下さい。 Auto_Closeで、指定のブックを一緒に閉じる処理を 書きましたが、エクセル自体を終了できません。 Workbook_BeforeCloseでも試しましたが、うまく処理 できません。エクセル本体も終了させたいです。 どのように記述したらよいでしょうか? 宜しくお願い致します。 コード Private Sub Auto_Close() '指定のブックを閉じる(すでにAAAファイルは開いている状態) Application.Windows("AAA.xlsx").Close False Application.Quit End Sub