VBA【確認無し】でブックを閉じる【初級編】保存の有無は関係ありません
こんにちは、ライター兼フリーランスエンジニア(仮)のセルオです。
今回は、VBAでブックを閉じる方法について紹介します。
ブックを操作して、保存した後に、不要なブックを閉じるパターンよくありますよね。
Excel VBAでブックを閉じる際、通常は確認ウィンドウが表示され、ブックを閉じるか確認されます。
しかし、確認ウィンドウを表示せずにブックを閉じたい場合があります。
ブックを閉じるいくつかの方法と
閉じる際に「変更内容を保存しますか?」という
確認ウィンドウを表示させない方法を紹介します。
また、マクロ実行ブックを閉じたい時、何も開いていないエクセルが開いたままですよね。
地味に気になりますよね。
その解決策はこちらの記事で紹介しています。*****
●この記事でわかること
- ブック名を指定してブックを閉じる
- ブックを閉じる複数の方法
- 確認ウィンドウを表示させないでブックを閉じる
- 閉じるのと保存を1文で実行する
サンプルコードと共に解説しますので、下記をご覧ください。
< ---目次--- >
◆ブック名を指定して閉じる
・サンプルコード
Sub ブックを閉じる()
Workbooks("Book1.xlsx").Close
End Sub
・解説
こちらのコードが基本となります。
ダブルクォーテーションで囲まれている「Book1」を閉じたいブックの名称に変更すれば
その名称のブックを閉じる事ができます。
「.xlsx」の拡張子はファイルに応じて「.xlsm」変更してください。
ですが、こちらのコードのみだと、特定の場合を除き、「変更内容を保存しますか?」という
メッセージが表示されてしまいます。
せっかくマクロで自動化しているのに、手動操作は無駄ですよね。
次に、確認メッセージを表示させない方法を紹介します。
特定の場合とは、ファイル内容を変更していない、再計算、他ファイルの参照値更新などが実行されていない状態です。
◆確認ウィンドウを表示させないで閉じる方法
そもそも、VBAにてブックを閉じる際に確認メッセージがでる原因をご存じでしょうか。
それは、ブックのなにかしらの変更があったのに保存していないからです。
セルの値を変えたりした場合が、それに当てはまります。
また、再計算や他ファイルなどのセルの関数によるリンクの更新なども当てはまります。
なので、セルの値を変更したのであれば、VBAからブックを閉じる前に保存をすることによって
保存確認ウィンドウは、表示されないという事です。
保存したくないけど、確認ウィンドウも表示したくないというパターンもありますよね
その2パターン紹介します。
・保存して閉じるサンプルコード
Sub 保存してからブックを閉じる()
With Workbooks("Book1.xlsx")
.Save
.Close
End With
End Sub
・解説
上述の基本と同様に名称を指定して、「.Save」で保存してから「.Close」をしています。
閉じる前に保存することで確認ウィンドウが表示されません。
・保存しないで閉じるサンプルコード
Sub 確認なしでブックを閉じる()
'保存状況を関係なく、メッセージ無しでブックを閉じる
Application.DisplayAlerts = False
Workbooks("Book1.xlsx").Close
Application.DisplayAlerts = True
'※変更しても保存確認ウィンドウが表示されないので要注意
End Sub
・解説
「Application.DisplayAlerts」の値を「False」にすることによって
エクセルから出る注意メッセージを表示しないようにしています。
なので、保存してても、してなくても、確認ウィンドウが表示されません。
コード内のコメントで記載している通り、こちらのコードは注意点があります。
それは、ブックの値が変更されていても、保存確認ウィンドウが表示されない事です。
このコードを実行した場合は、保存しないで、閉じる事になりますので、それを十分に理解した上で
ご使用してください。
◆ブック名を指定して閉じる方法
・サンプルコード
Sub 保存と同時にブックを閉じる()
Workbooks("Book1.xlsx").Close SaveChanges:=True
End Sub
・解説
ブックの保存と閉じるを1文で実行しています。
保存しないで閉じるサンプルコードと実行結果は同様です。
個人的には推奨しません。
理由としては、直感でわかりにくいからです。
他者がコードをデバッグ等している時に、「Close」だけ見て判断した場合
保存している事を見逃す可能性があります。
1文で2個の実行結果をもたらすコードも割と少ないと思います。
なので、1個の実行結果しかないと思っていると見落とす可能性があるのでオススメはしません。
◆まとめ
ブックを閉じる時は、Closeメソッドを実行します。このとき、ブックに変更があると、ブックを閉じる前に「変更を保存しますか?」という確認ダイアログが表示されます(図)。ブック内に“自動再計算”の関数が使われていても、確認ダイアログが表示されます。
SaveChanges:=True/False