Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 保存時に同じ名前のファイルがあったときに確認して上書き保存するExcelマクロ

保存時に同じ名前のファイルがあったときに確認して上書き保存するExcelマクロ

対象:Excel2007, Excel2010, Excel2013

SaveAsメソッドでブックを保存するときに同じ名前のファイルがあった場合のマクロを2つご紹介しました。

同じ名前のファイルがないか事前に確認して存在していた場合に中断するマクロと、強制的に上書き保存するマクロです。

同じ名前のファイルがあったときに、上書きするかどうかを確認する、という仕様が選ばれることもあるでしょう。

[スポンサードリンク]

On Error Resume Next文でエラーを無視するサンプルマクロ

同じ名前のファイルがあったときに、上書きするかどうかを確認する方法もいくつか考えられます。

同じ名前のファイルが存在しているときにSaveAsメソッドを実行した場合、
「この場所に'○○'という名前のファイルが既にあります。置き換えますか?」
という[はい][いいえ][キャンセル]という3つのボタンが並んだ確認メッセージが表示されます。

[いいえ]や[キャンセル]が押されたときに発生するエラーを無視してしまうという方法が一つです。

Sub アクティブなブックを同じ名前でデスクトップに保存_同名ファイルがあれば保存しない()

 Dim wsh As Object 'IWshRuntimeLibrary.WshShell
 Dim dt_path As String
 Dim bk_name As String

 Set wsh = CreateObject("WScript.Shell")
 dt_path = wsh.SpecialFolders("desktop")
 Set wsh = Nothing

 bk_name = ActiveWorkbook.Name
 bk_name = dt_path & "\" & bk_name

 On Error Resume Next

 ActiveWorkbook.SaveAs Filename:=bk_name

 If Err.Number <> 0 Then
  MsgBox "保存しませんでした。"
 End If

End Sub

SaveAsメソッドを実行する前に、On Error Resume Next文を入れることで、
 On Error Resume Next
 ActiveWorkbook.SaveAs Filename:=bk_name
同じ名前が存在していたときに表示される、「この場所に'○○'という名前のファイルが既にあります。置き換えますか?」メッセージボックスで、[いいえ]や[キャンセル]が押されたときに発生するエラーを無視しています。

[はい]が押されたときには上書き保存され、[いいえ]や[キャンセル]が押されたときにはエラーメッセージが表示されなくなり、もちろん保存もされません。

事前にチェックしてオリジナルの確認メッセージを表示するサンプルマクロ

上記のマクロでは、[いいえ]と[キャンセル]が同じ動きになり、そこが気持ち悪いと感じる方もいらっしゃるようです。

上書き保存するか、しないかの二択なわけですから、[はい][いいえ]または[OK][キャンセル]の二択のメッセージを表示してやるといいでしょう。

Sub アクティブなブックを同じ名前でデスクトップに保存_事前チェック()

 Dim wsh As Object 'IWshRuntimeLibrary.WshShell
 Dim dt_path As String
 Dim bk_name As String
 Dim msg As String

 Set wsh = CreateObject("WScript.Shell")
 dt_path = wsh.SpecialFolders("desktop")
 Set wsh = Nothing

 bk_name = ActiveWorkbook.Name
 bk_name = dt_path & "\" & bk_name

 If Dir(bk_name) <> "" Then
  msg = "同じ名前のブックがデスクトップに存在します。上書きしますか?"
  If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub
 End If

 Application.DisplayAlerts = False
 ActiveWorkbook.SaveAs Filename:=bk_name
 Application.DisplayAlerts = True

End Sub

Dir関数を使って、同じ名前のファイルが存在していないかをチェックして、
 If Dir(bk_name) <> "" Then

同名ファイルが存在していたときにメッセージを表示して[いいえ]ボタンが押されたときにはマクロを終了してしまいます。
  msg = "同じ名前のブックがデスクトップに存在します。上書きしますか?"
  If MsgBox(msg, vbYesNo) = vbNo Then Exit Sub

[はい]が押されたときには処理が進み上書きが行われますが、そのまま進むとSaveAsメソッド実行時に
「この場所に'○○'という名前のファイルが既にあります。置き換えますか?」
メッセージが表示されてしまうので、DisplayAlertsプロパティにFalseを設定して、メッセージが表示されないようにしています。
 Application.DisplayAlerts = False
 ActiveWorkbook.SaveAs Filename:=bk_name

関連語句
VBA, Visual Basic for Applications

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 保存時に同じ名前のファイルがあったときに確認して上書き保存するExcelマクロ

「Workbooks・Workbook」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.