Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

VBA エクセルブックを閉じる方法とその周辺

VBAでエクセルブックを開いたり閉じたりする検索があるので、解説したいと思います。
その時に色々と工夫すると使い勝手の良いツールとなりますので、単に閉じるだけでなく、一歩踏み込んだ操作まで頑張ってマスターしていきましょう。

この記事は初級~中級です。
レベルについてはExcel VBAの実力(レベル)を定義してみる 初心者~三段をご参照ください。


目次

エクセルブックを閉じる方法

アクティブなエクセルのブックを閉じるのはたったの一行です。

ActiveWorkbook.Close

しかし、これでは保存して閉じるのか、保存せずに閉じるのかわかりません。
引数に保存して閉じるのか、そうでないのかを指定しましょう。

ActiveWorkbook.Close SaveChanges:=False  '保存せずに閉じる
ActiveWorkbook.Close SaveChanges:=True  '保存して閉じる

SaveChangesは自動でSとCが大文字に変換されませんが、問題ありません。
書く必要もないのですが、後から見てわかりやすいように、私は書くようにしています。

ブックは変数に格納しておく

しかし、この方法だといちいち閉じるためにブックをアクティブにしなければなりません。
それは避けたいですよね。私のお勧めはブックを変数に格納しておくことです。
この記事で一番重要な部分です。

Sub ブックを変数に入れることで取り扱いをしやすくする()
    
    Dim ブック As Workbook
    
    Workbooks.Add
    Set ブック = ActiveWorkbook
    
End Sub

このように、変数に格納しておけば、アクティブにしたり任意のタイミングで閉じたり、取り扱いが大変やりやすくなります。

>||
ブック.Activate
ブック.SaveAs Filename:="フルパス"
ブック.Save '上書き保存
ブック.Close SaveChanges:=False
ブック.Close SaveChanges:=True
|


便利ですね。

ブックはオブジェクトなので、変数に代入する時はSetをつけ忘れないようにしましょう。

成果物のデータはぎりぎりまで保存しない

入力データに何かの処理を施して、成果物ができますが、その成果物はマクロの実行が完了するぎりぎりまで保存しない方がよいことが多いです。

理由は、途中で何らかの予期せぬエラーが起きたり、途中でユーザーがマクロの実行を中断した場合に、余計なデータが保存された状態になってしまう為です。

エクセルブックは保存するまで、ファイル名が確定しません。そのため、ブックを指定するため(つまり、Workbooks(ファイル名)を使う為)に一旦西行完了前のブックを保存する方がいるかもしれませんが、これを解決するのが上述の変数にブックを格納する方法です。

特に理由がない限り、成果物のデータはぎりぎりまで保存しない。これを意識しましょう。