Excel VBA Saveメソッドでファイルを上書き保存する

ファイル/フォルダ操作

今回はファイルを上書き保存する方法をご説明します。

上書き保存するには「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」を使用して名前を付けて保存した方がいいと思います

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