エクセルファイルを閉じる
説明
基本構文
ブックを閉じる場合は、「ブックオブジェクト.Close」で閉じることができます。
Sub Sample1()
' マクロを実行しているエクセルファイルを閉じる
ThisWorkbook.Close
End Sub
上のサンプルを動作させると、前回の保存から変更があった場合に保存するか
確認するポップアップが表示されてしまいます。
上書きして閉じる/保存しないで閉じるはCloseの引数で指定できます。
引数一覧
引数名 | 説明 |
---|---|
SaveChanges | 閉じる際に変更を保存するかどうかを指定します。True を指定すると、変更がブックに保存されます。ただし、ブックに変更がない場合、この引数は無視されます。ファイル名がまだない場合は 、第二引数[FileName] が 使用されます。 |
FileName | このファイル名の下に変更を保存します。 |
RouteWorkbook | ブックを次の受信者に回覧する必要がない場合 (回覧用紙がないか、既に回覧されている場合)、この引数は無視されます。 それ以外の場合、このパラメーターの値に応じてブックが回覧されます。True を指定すると、次の受信者にブックが送信されます。 |
上記表の一部の説明はMicrosoft社のリファレンスを参考にしています。
ファイルを保存しないで閉じる
前回の保存から変更があっても、保存せずにブックを閉じる方法です。
第一引数に「False」を指定します。
Sub Sample2()
' マクロを実行しているエクセルファイルを保存しないで閉じる
ThisWorkbook.Close False
End Sub
ファイルを上書き保存して閉じる
ファイルを上書きして閉じる方法です。
なお、上書き保存を行うのはブックに変更があったときのみです。
変更がない場合は上書きしません。
Sub Sample3()
' マクロを実行しているエクセルファイルを上書き保存して閉じる
ThisWorkbook.Close True
End Sub
エクセルファイルの新規作成した(=名前のついていない)ブックは、ダイアログが出現して保存するディレクトリとファイル名をユーザーに確認してきます。
必ず上書き保存してから閉じる
必ず上書き保存してから閉じる方法です。
先に述べた通り「ブックオブジェクト.Close」だけでは、変更がなかった場合、上書き保存がされませんが、それでは不都合になる場合があります。
「ブックオブジェクト.Save」を用いて、保存してから閉じましょう。
Sub Sample4()
' 必ず上書き保存してから閉じる
ThisWorkbook.Save
ThisWorkbook.Close
End Sub
「ブックオブジェクト.Save」の使用方法は下記リンクを参照ください。
ポップアップを表示させず閉じる
ポップアップを表示させず、閉じる方法です。
' ポップアップを表示しないようにする
Application.DisplayAlerts = False
' ポップアップを表示させる
Application.DisplayAlerts = True
上述の通り「Application.DisplayAlerts」のTrue/Falseを切り替えることで、エクセルの設定を一時的にポップアップが表示されないようにしています。
Falseにした後、必要な処理を終えたら、Trueに戻すことを忘れずにしましょう。
マクロの実行が終了したとき、自動的にTrueに戻るようですが、原則、設定を変更したら戻したほうが良いでしょう。
Sub Sample5()
Application.DisplayAlerts = False
' 第一引数を True から False or 指定なしに変更すると保存しないで閉じる
ThisWorkbook.Close True
Application.DisplayAlerts = True
End Sub
注意点として、対象のブックが新規ブックの場合は、保存するファイル名を決定するためダイアログが表示されます。これを回避するには「ThisWorkbook.Close」の前の行に「ブックオブジェクト.SaveAs」を入れてください。詳しい使用方法は下記リンクを参照ください。
名前を付けて保存する
「ファイルに名前をつけて保存」をして閉じる(例外有)
「ファイルに名前をつけて保存」をして閉じる方法です。
表題の「例外有」とは、ブックに変更がないと保存されません。
つまり、この方法では「ファイル名を指定して保存」を行うのはブックに変更があったときのみです。
(必ず保存したい場合は「必ず「ファイルに名前をつけて保存」をして閉じる」を参照。)
Closeの第二引数にファイルパスとファイル名を指定します。
Sub Sample6()
ThisWorkbook.Close True, ThisWorkbook.Path & "/newbook.xlsm"
End Sub
必ず「ファイルに名前をつけて保存」をして閉じる
今回は変更の有無にかかわらず、「ファイルに名前をつけて保存」を行った後にファイルを閉じます。
「ファイルに名前をつけて保存」は『Application.GetSaveAsFilename』です。
下記サンプルでは「ファイルに名前をつけて保存」が成功した時にのみ閉じるようにしています。
Sub Sample7()
Dim val As Variant
' 「名前をつけて保存」を行う
val = Application.GetSaveAsFilename("新規ファイル.xlsm", _
"エクセルファイル,*.xls;*.xlsx;*.xlsm")
' valの値は、保存に成功時はパス(文字列型)、失敗時はFalse(Boolean型)
If VarType(val) = vbString Then
'保存に成功したときの処理
ThisWorkBook.Close ' エクセルファイルを閉じる
Else
'保存に失敗したときの処理
End If
End Sub