Excel Tips by pPoy

トップへ←Top    VBAへVBA  VBA基礎へ VBA 基礎  一般へ一般  

Macro ABC ExcelVBAで自分自身を閉じる方法色々
《Quit メソッド》(Excel97,2000,2002)
ExcelVBA で、自分自身を終了するのはタイミングが難しいです。
順番を間違えると、 Book を閉じても Excel が一人寂しく残されてしまったりします。
以下に、ExcelVBA で自分自身を閉じる方法をまとめてみました。

≪1. 自分自身を保存しないで閉じる、同時に Excel も終了する≫
Sub excel_Quit1()
'自分自身を保存しないで閉じる 2006/10/08 pPoy
'同時に Excel も終了する
'ただし自分以外の Book は保存の問い合わせが出る

    '保存したことにする (保存はしない)
    ThisWorkbook.Saved = True
    'Excel を終了する
    Application.Quit
    'Book を閉じる
    ThisWorkbook.Close False
End Sub
上のコードを実行すると、自分自身を保存せず (警告なし) に、終了します。
同じインスタンス (※) で開いている Book があった場合、自分以外の Book に関してのみ、
保存の問い合わせが出ます。 最終的に Excel も終了します。
この頁のTOPへTop
≪2. 自分自身のみ保存しないで閉じる、他の Book に対しては何もしない≫
Sub excel_Quit2()
'自分自身のみ保存しないで閉じる 2006/10/08 pPoy
'他の Book に対しては何もしない
'他に開いている Book が無い場合のみ Excel も終了する
    With ThisWorkbook
        If Workbooks.Count > 1 Then
            '他の Book あり
                '保存したことにする (保存はしない)
                .Saved = True
                '自Book を閉じる
                .Close False
        Else
            '単独で Open 時
                '保存したことにする (保存はしない)
                .Saved = True
                'Excel を終了する
                Application.Quit
                'Book を閉じる
                .Close
        End If
    End With
End Sub
上のコードを実行すると、自分自身を保存せず (警告なし) に、終了します。
同じインスタンス (※) で開いている 他の Book には何もしません。
他に開いている Book が無い場合のみ Excel も終了します。
この頁のTOPへTop
≪3. 自分自身は保存しないで閉じる、他の Book は保存して閉じる≫
Sub excel_Quit3()
'自分自身は保存しないで閉じる 2006/10/08 pPoy
'他の Book は保存して閉じる
'最後に Excel も終了する
    Dim w As Workbook
    'まず、自分以外の Book を保存して閉じる
    For Each w In Workbooks
        If w.Name <> ThisWorkbook.Name Then
            w.Close SaveChanges:=True
        End If
    Next
    
    '自分自身は保存したことにする (保存はしない)
    ThisWorkbook.Saved = True
    'Excel を終了する
    Application.Quit
    'Book を閉じる
    ThisWorkbook.Close False
End Sub
上のコードを実行すると、自分自身を保存せず (警告なし) に、終了します。
同じインスタンス (※) で開いている 他の Book は全て保存してから閉じます。
最終的に Excel も終了します。
この頁のTOPへTop
≪4. 全ての Book を保存しないで閉じる、最後に Excel も終了する≫
Sub excel_Quit4()
'全ての Book を保存しないで閉じる 2006/10/08 pPoy
'最後に Excel も終了する
    Dim w As Workbook
    '全ての Book を保存したことにする (保存はしない)
    For Each w In Workbooks
        w.Saved = True
    Next
    
    'Excel を終了する
    Application.Quit
    'Book を閉じる
    ThisWorkbook.Close False
End Sub
上のコードを実行すると、自分自身を含めて、同じインスタンス (※) で開いている
他の Book も、全て保存せず (警告なし) に閉じます。
最終的に Excel も終了します。
この頁のTOPへTop
≪5. 全ての Book を保存して閉じる、最後に Excel も終了する≫
Sub excel_Quit5()
'全ての Book を保存して閉じる 2006/10/08 pPoy
'最後に Excel も終了する
    Dim w As Workbook
    '全ての Book を保存する
    For Each w In Workbooks
        w.Save
    Next
    
    'Excel を終了する
    Application.Quit
    'Book を閉じる
    ThisWorkbook.Close False
End Sub
上のコードを実行すると、自分自身を含めて、同じインスタンス (※) で開いている
他の Book も、全て保存してから閉じます。
最終的に Excel も終了します。
この頁のTOPへTop
≪補足 ※インスタンス≫
  • 正確なインスタンスの解説は、インスタンス 【instance】 を参照してください。
    (IT用語辞典 e-Words による用語の説明です)
    ここで使用している 「Excel のインスタンス」 とは、開いている Excel Application
    のことを指しています。

  • Windows の 「スタート」−「プログラム」−「Microsoft Excel」 から開いた Excel は、
    既に Excel が開かれている場合でも、「新しいインスタンス」 で開かれます。

  • 既に Excel が開かれている場合、ファイル名をダブルクリックして開いた Book は、
    先に開かれた Excel の 「既存のインスタンス」 を使用して開かれます。

  • Excel 2002 の場合、同じインスタンスで開いた Book は、1つの Excel 画面の後ろに
    隠れてしまいます。
    別のインスタンスで開いた Book は、別々の Excel 窓に表示されます。
≪注意≫
  • 上の、1. 〜 4. の方法は、コード実行中の Book を 保存しないで イキナリ閉じます。
    コードのテストをする前に、予め保存しておくことをお勧めします。(^^ゞ

  • 上の 「他の Book 」 や、「全ての Book 」 とは、同じインスタンスで開いた Book が対象です。
    別のインスタンスで開かれている Book には影響しません。

  • Excel VBA で自分自身を閉じるためには、コードの順番が大切です。
    先に、Quit してから Close をすると綺麗に閉じることができます。
    ※ ちょっと逆のような気がしますが。。。(^^ゞ


この頁のTOPへTop
【念の為の注意書きです。】
このページ(下位ページ含む)の全ての物の無断転載を禁止いたします。
又、当ページ(下位ページ含む)に記載されていることは、全て自己の責任において実行してください。

☆ 感想をお知らせください (直接ブラウザから送信致します。メールアカウントは不要です。)
  form mail はこちら


Copyright(C) pPoy 2006-2010