VBA入門
ブックを閉じる・保存(Close,Save,SaveAs)

ExcelマクロVBAの基本と応用、エクセルVBAの初級・初心者向け解説
公開日:2013年5月以前 最終更新日:2022-12-15

第64回.ブックを閉じる・保存(Close,Save,SaveAs)


VBA マクロ ブックを開く Open

ワークブックを閉じる場合や保存する場合のマクロVBAの説明です。
閉じる時に保存するか保存しないかを指定できます。
また、
ブックを保存するにも、上書きなのか別ファイルにするのか等によってVBAの記述がそれぞれ違ってきます。



ブックを閉じる

ブックを閉じるには、WorkbookのCloseメソッドを使用します。

Workbook.Close SaveChanges, Filename, RouteWorkbook

SaveChanges ブックに変更がない場合、この引数は無視されます。ブックに変更がある場合、この引数で変更を保存するかどうかを指定します。
Filename 変更後のブックのファイル名。
RouteWorkbook ブックの回覧。

全ての引数がオプション(任意の指定)となっています。

全ての引数を省略
Workbook.Close
とだけ指定した場合は、ブックに変更が無ければそのまま閉じられ、
ブックに変更がある場合は、保存確認のメッセージが表示されます。
ただし、
Application.DisplayAlerts = False
これが指定されている場合は、確認のメッセージが表示されずに保存もされません。

SaveChanges
ブックに変更がある場合に、保存するかどうかを指定します。
True:ブックに変更がある場合は保存します。
False:ブックに変更があっても保存せずに閉じます。

保存しないで閉じる
Workbook.Close SaveChanges:=False

保存して閉じる
Workbook.Close SaveChanges:=True

他の引数は、通常はあまり使用しません。


ブックを上書き保存

ブックを上書き保存するには、WorkbookのSaveメソッドを使用します。

Workbook.Save

これで上書き保存されます。


ブックに名前を付けて保存

ブックを名前を付けて保存するには、WorkbookのSaveAsメソッドを使用します。

Workbook.SaveAs FileName, FileFormat, Password, WriteResPassword, ReadOnlyRecommended, CreateBackup, AccessMode, ConflictResolution, AddToMru, TextCodepage, TextVisualLayout, Local

Filename 保存するファイルの名前を表す文字列を指定します。
FileFormat ファイルを保存するときのファイル形式を指定します。
Password ファイルを保護するためのパスワードを表す15 文字以内の文字列を指定します。
WriteResPassword ファイルの書き込みパスワードを表す文字列を指定します。
ReadOnlyRecommended 読み取り専用で開くことを推奨するメッセージを表示するには、True を指定します。
CreateBackup バックアップ ファイルを作成するには、True を指定します。
AccessMode ブックのアクセス モードを指定します。
ConflictResolution ブックを保存するときの競合の解決方法を指定します。
AddToMru 最近使用したファイルの一覧にブックを追加するにはTrueを指定。既定値はFalseです。
TextCodepage 使用しない。
TextVisualLayout 使用しない。
Local 通常は使用しない。
※csv出力時
 日付がm/d/yyyyになってしまう場合に、yyyy/m/dにする場合にはTrueを指定

全ての引数がオプション(任意の指定)となっています。
しかし通常は、FileNameは必ず指定します。

FileName
フルパスで指定して下さい。
パスを指定しない場合は、カレントフォルダーに保存されます。

FileFormat
xlExcel8 : Excel2007以降の、xlsxまたはxlsm
xlExcel9795 : Excel2003以前のxls

Excel2003以前では、xlExcel8、この定数は使用できません、コンパイルエラーとなります。

SaveAsメソッドの使用例
Thisworkbook.SaveAs "C:\User\sample.xlsm"

実行しているマクロが書かれているブックが、"C:\User\sample.xlsm" で保存されます。
既にファイルが存在する場合は、以下のダイアログメッセージが表示されます。

マクロ VBA ブックの保存 Save SaveAs SaveCopyAs

「はい」を選択すれば上書き保存されますが、
「いいえ」または「キャンセル」を選択すると、VBAは以下のエラーで停止します。

マクロ VBA ブックの保存 Save SaveAs SaveCopyAs

SaveAsに先立って、
Application.DisplayAlerts = False
これを実行しておくことで、既にファイルが存在していてもそのまま上書き保存されます。

Application.DisplayAlerts = False
ThisWorkbook.SaveAs "D:\temp\sample.xlsm"


ブックのコピーを保存

ブックのコピー(別ファイルとして)を保存するには、WorkbookのSaveCopyAsメソッドを使用します。

Workbook.SaveCopyAs Filename

ブックのコピーを別ファイルとして保存します。
メモリ上のブック(開かれているブック)に対しては、変更は行われません。
バックアップの作成等で使用します。


ブックを閉じる・保存の実践例

他のブックが開かれている場合は、自身のブックを閉じ、
他のブックが開かれていない場合は、Excelを終了する場合。

Sub 保存して終了()
  If Workbooks.Count > 1 Then
    ThisWorkbook.Close SaveChanges:=True
  Else
    ThisWorkbook.Save
    Application.Quit
  End If
End Sub

Sub 保存しないで終了()
  If Workbooks.Count > 1 Then
    ThisWorkbook.Close SaveChanges:=False
  Else
    ThisWorkbook.Saved = True
    Application.Quit
  End If
End Sub

Application.Quit
Applicationオブジェクトのメソッドで、Excelを終了します。

ThisWorkbook.Saved = True
.Savedプロパティには、ブックが保存後に変更されたかの情報が入っていて、値の設定も可能です。
.
SavedをTrueにすることで保存後に変更が無い状態にすることが出来ます。
これにより、Close時に保存確認のメッセージが表示されないようにしています。
これは、
Application.DisplayAlerts = False
Application.Quit
このようにしても同じ結果になります。




同じテーマ「マクロVBA入門」の記事

第61回.「On Error GoTo」と「Exit Sub」
第62回.「On Error Resume Next」とErrオブジェクト
第63回.ブックを開く(Open,Add)
第64回.ブックを閉じる・保存(Close,Save,SaveAs)
第65回.シートの挿入、名前の変更(Add,Name)
第66回.シートのコピー・移動・削除(Copy,Move,Delete)
第67回.総合練習問題7
第68回.シートの保護、ブックの保護(Protect)
第69回.シートの非表示(Visible,Hidden)
第70回.ウィンド枠の固定(FreezePanes)
第71回.印刷(PrintOut)


新着記事NEW ・・・新着記事一覧を見る

VBA10大躓きポイント(初心者が躓きやすいポイント)|VBA技術解説(2024-03-05)
テンキーのスクリーンキーボード作成|ユーザーフォーム入門(2024-02-26)
無効な前方参照か、コンパイルされていない種類への参照です。|エクセル雑感(2024-02-17)
初級脱出10問パック|VBA練習問題(2024-01-24)
累計を求める数式あれこれ|エクセル関数応用(2024-01-22)
複数の文字列を検索して置換するSUBSTITUTE|エクセル入門(2024-01-03)
いくつかの数式の計算中にリソース不足になりました。|エクセル雑感(2023-12-28)
VBAでクリップボードへ文字列を送信・取得する3つの方法|VBA技術解説(2023-12-07)
難しい数式とは何か?|エクセル雑感(2023-12-07)
スピらない スピル数式 スピらせる|エクセル雑感(2023-12-06)


アクセスランキング ・・・ ランキング一覧を見る

1.最終行の取得(End,Rows.Count)|VBA入門
2.RangeとCellsの使い方|VBA入門
3.セルのコピー&値の貼り付け(PasteSpecial)|VBA入門
4.繰り返し処理(For Next)|VBA入門
5.変数宣言のDimとデータ型|VBA入門
6.ブックを閉じる・保存(Close,Save,SaveAs)|VBA入門
7.並べ替え(Sort)|VBA入門
8.条件分岐(IF)|VBA入門
9.セルのクリア(Clear,ClearContents)|VBA入門
10.マクロとは?VBAとは?VBAでできること|VBA入門




このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。


記述には細心の注意をしたつもりですが、
間違いやご指摘がありましたら、「お問い合わせ」からお知らせいただけると幸いです。
掲載のVBAコードは動作を保証するものではなく、あくまでVBA学習のサンプルとして掲載しています。
掲載のVBAコードは自己責任でご使用ください。万一データ破損等の損害が発生しても責任は負いません。



このサイトがお役に立ちましたら「シェア」「Bookmark」をお願いいたします。
本文下部へ