【VBAリファレンス|実務向け】[Lesson20:VBAでブックを閉じる!Closeメソッドを使いこなそう]

スポンサーリンク

1. 導入:なぜVBAでブックを閉じる必要があるのか

実務において、複数のブックからデータを集計したり、バックアップ用のファイルを自動生成したりする処理は日常茶飯事です。しかし、処理が終わった後にブックを開きっぱなしにしていると、メモリの圧迫や「ファイルが使用中です」といったエラーの原因になります。VBAで適切にブックを閉じることは、マクロの安定稼働とPCのパフォーマンス維持に直結する重要なスキルです。

2. 基礎知識:ブックを閉じる「Close」メソッド

VBAでブックを閉じるには、WorkbookオブジェクトのCloseメソッドを使用します。
基本構文は「ブック名.Close」です。このメソッドには重要な引数が2つあります。
・SaveChanges:変更を保存するかどうか(Trueで保存、Falseで保存しない)
・FileName:保存先パス(名前を付けて保存する場合に指定)

もし保存するかどうかを省略すると、ユーザーに「保存しますか?」という警告ダイアログが表示されてしまい、完全自動化がストップしてしまいます。実務では、この引数を制御することが必須となります。

3. 実装:状況に応じた閉め方

現場では、主に以下の3つのパターンを使い分けます。

・保存して閉じる:処理結果を確実に残したい場合に利用します。
・保存せずに閉じる:読み取り専用で開いた場合や、加工失敗時に変更を破棄したい場合に利用します。
・警告を表示させずに強制終了:エラー処理などで、とにかく今のブックを閉じたい場合に利用します。

4. サンプルプログラム:実用的なブック操作

以下に、現場でそのまま使えるコード例を紹介します。

Sub CloseWorkbookExample()
‘ 対象のブックをオブジェクトとして設定
Dim wb As Workbook
Set wb = Workbooks(“集計データ.xlsx”)

‘ 1. 変更を保存して閉じる場合
‘ wb.Close SaveChanges:=True

‘ 2. 変更を保存せずに閉じる場合(読み取り専用などで便利)
wb.Close SaveChanges:=False

‘ 3. 複数のブックをまとめて閉じる場合
‘ For Each wb In Workbooks
‘ If wb.Name <> ThisWorkbook.Name Then
‘ wb.Close SaveChanges:=True
‘ End If
‘ Next wb

MsgBox “ブックを閉じました。”
End Sub

5. 応用・注意点:現場で陥りやすい罠

実務で最も注意すべきは「自分自身のブック」を閉じようとしてエラーになるケースです。マクロを実行しているブック(ThisWorkbook)を閉じる場合、その後のコードが実行できなくなるため、必ず処理の最後に記述してください。

また、DisplayAlertsプロパティ(Application.DisplayAlerts = False)を併用すると、保存確認のダイアログを強制的に非表示にできますが、設定をFalseにしたまま忘れると、重要な警告まで無視されてしまうリスクがあります。基本的にはCloseメソッドの引数で制御し、どうしても必要な場合のみDisplayAlertsを使用するようにしましょう。

タイトルとURLをコピーしました