5-7.ブックを閉じる

今回は、ブックの閉じ方(ファイルの閉じ方)について説明します。

ブックを閉じる

Closeメソッド

○構文
Workbook.Close SaveChanges,FileName,RouteWorkbook

○処理
オブジェクトに指定したブックを閉じます。
エクセルのショートカットキー Ctrl + Wに該当します。

オブジェクトにWorksheetsコレクションを指定すると、開いているすべてのブックを閉じます。

○引数
SaveChangesとFileNameの組み合わせで、保存方法が変わるので若干ややこしいですが、単にブックを閉じるだけでなく、保存して閉じる処理を一括で行うことができます。

引数必須データ型内容
SaveChanges省略可True / False○引数を省略
・変更を保存していない場合、保存ダイアログを表示
・変更を保存している場合、そのまま閉じる

○Falseを指定
・保存しないで閉じる

○Trueを指定
<新規ブックの場合>
・FileNameに指定した名前で保存して閉じる
・FileNameが指定されていない場合、保存ダイアログが表示される
<既存ブックの場合>
・上書き保存して閉じる
・FileNameが指定されている場合、FileNameに指定した名前で保存する
FileName省略可SaveChangesがTrueの場合、保存するファイル名を指定
SaveChangesを省略またはFalseの場合、FileNameは無視される
RouteWorkbook省略可True / Falseブックに回覧の設定がされている場合、
Trueを指定:次の受信者にブックを送信
Falseを指定:送信しない
Sub ブックを閉じる()
    
    '保存せず閉じる
    ActiveWorkbook.Close SaveChanges:=False
    
    '保存して閉じる
    ActiveWorkbook.Close SaveChanges:=True
    
    '名前を変更して保存して閉じる
    ActiveWorkbook.Close SaveChanges:=True, _
    FileName:=Replace(ActiveWorkbook.FullName, ".xlsm", "_Backup.xlsm")
    
End Sub

アプリケーションを終了する

前述のCloseメソッドを使用した際、ブックは閉じますが、下の図のようにエクセルの画面は残ってしまいます。

closeメソッド後の画面

エクセルの構造は、アプリケーションという枠があり、その中にブックファイルがあります。
そのため、ブックを閉じても、アプリケーションの枠が残るということです。

アプリケーションとブックの関係

アプリケーションの枠ごと閉じるためには、Quitメソッドを使用します。

Quitメソッド

○構文
Applicatoin.Quit

○処理
エクセルアプリケーションを終了します。
ブックが残っている場合、ブックを閉じてアプリケーションを終了します。
ブックが保存されていない場合、保存ダイアログが表示されます。
エクセルのショートカットキー Alt + F4 に該当します。

Sub アプリケーションを終了()
    
    Application.Quit
    
End Sub

ブックの変更内容が保存されているか確認する

ブックの内容を変更した後に、保存されているかを確認するためにSavedプロパティを使用します。
Savedプロパティは、ブックの保存後にブックの内容が変更されているかを返します。

Savedプロパティ

○構文
<ブックの変更状態の確認>
Workbook.Saved
<ブックの変更状態の変更>
Workbook.Saved = True / False

○処理
オブジェクトに指定したブックの変更状態を確認・変更します。
Trueの場合、保存後、変更されていない状態になります。(=変更が保存されている)
Falseの場合、保存後、変更している状態になります。(=変更が保存されていない)

あくまで変更状態を表すものなので、実際に保存していない状態で、Saved = Trueと設定した場合、ファイルとして変更は保存されていないが、保存した状態として扱われることになります。

つまり、そのままブックを閉じてしまうと、保存していないことを警告するメッセージは表示されず、保存されないまま閉じられることになります。

確実に変更を保存したい場合は、Saveメソッドなどで保存するよう注意しましょう。

Sub 変更状態の確認()

    '変更状態の確認
    MsgBox ActiveWorkbook.Saved

    '変更を保存せず閉じる
    ActiveWorkbook.Saved = True
    ActiveWorkbook.Close
        
End Sub

コメント