今回はファイルを上書き保存する方法をご説明します。
上書き保存するには「Save」メソッドを使用します。
上書き保存といっても、VBAが書かれた自身のファイルを上書き保存する場合や、別のファイルを操作して上書き保存する場合、新規ブックを作成して上書き保存する場合があると思いますので、それぞれご説明します。
その他のファイルの保存方法については、次の記事をご覧ください。
1.ファイルを上書きする方法
まずはファイルを上書き保存する基本的な記述方法について、ご説明します。
ファイルを保存するには「Save」メソッドを使います。
「Save」メソッドを使って上書き保存するには次のように書きます。
ThisWorkbook.Save
ThisworkbookはVBAが書かれている自分自身のファイルです。
また、上書き保存したあとにファイルを閉じるには「Close」メソッドで閉じます。
ThisWorkbook.Close
2.VBAの書かれたファイルを保存する
VBAの書かれたファイル、つまり自身を上書き保存する方法です。
更新や集計など、何かしらの処理を行なったあとに自身を上書き保存して閉じるケースは非常に多いと思います。
自身を上書き保存して閉じる方法は次のように書きます。
非常にシンプルです。
Sub Sample1()
ThisWorkbook.Save
ThisWorkbook.Close
End Sub
3.指定したファイルを上書き保存して閉じる
次は自身とは別のファイルを上書き保存する方法について、ご説明します。
別ファイルを更新して上書き保存する場合は、ファイルを指定してから上書き保存します。
次のコードでは別ファイルの「Text.xlsx」を指定して上書き保存して閉じます。
基本的にファイル名を指定する場合には「拡張子」は記載する事を推奨します。
使用するユーザーのファイル名の表示設定で、拡張子を表示設定にしているPCでは、ファイル名の拡張子を省略したコードを使用した場合にエラーになるためです。
Sub Sample2()
Workbooks("Test.xlsx").Save
Workbooks("Test.xlsx").Close
End Sub
※上記コードを実行した結果「インデックスが有効範囲ではありません」というエラーが出た場合には、一度手動で上書き保存して、再度開きなおしてみてください。
4.新規ブックを上書き保存する
既存ファイルを操作して上書き保存する場合は、上記のSample2のコードでも問題ありません。
ですが、新しいファイル(Book1など)を作成して、上書き保存する場合は注意する事があります。
それはファイル名と拡張子です。
警告メッセージを回避する
同じフォルダに同じファイル名が存在した場合に確認メッセージが出ます。
これはExcel を手作業で操作する場合にも同じ現象が発生します。
この確認メッセージが出てしまうとVBAはそこで止まってしまいますので、メッセージを回避します。
回避するには「Application.DisplayAlerts」をFalseに指定します。
Sub Sample3()
Workbooks.Add
Application.DisplayAlerts = False
Workbooks("Book1").Save
Workbooks("Book1.xlsx").Close
Application.DisplayAlerts = True
End Sub
新規ブックの拡張子の注意点
上記のコードで「Workbooks(“Book1”).Save」の部分に拡張子がありません。
このコードは1行目に「Workbooks.Add」で新規ブック(Book1)を作成しています。
一度も保存されていないファイルは拡張子がないため、新規ブックを初めて保存する場合には拡張子を指定しません。
メモリー上に存在するだけで、この段階ではファイルとして存在していないためです。
新規ブックでない場合は基本的に拡張子を記載しましょう。
基本的に新規ブックを保存する場合は「SaveAs」を使用して名前を付けて保存した方がいいと思います。