SaveAsメソッドでブックを保存するときに同じ名前のファイルがあった場合のマクロを2つご紹介しました。
同じ名前のファイルがないか事前に確認して存在していた場合に中断するマクロと、強制的に上書き保存するマクロです。
同じ名前のファイルがあったときに、上書きするかどうかを確認する、という仕様が選ばれることもあるでしょう。
On Error Resume Next文でエラーを無視するサンプルマクロ
同じ名前のファイルがあったときに、上書きするかどうかを確認する方法もいくつか考えられます。
同じ名前のファイルが存在しているときにSaveAsメソッドを実行した場合、
「この場所に'○○'という名前のファイルが既にあります。置き換えますか?」
という[はい][いいえ][キャンセル]という3つのボタンが並んだ確認メッセージが表示されます。
[いいえ]や[キャンセル]が押されたときに発生するエラーを無視してしまうという方法が一つです。
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
SaveAsメソッドを実行する前に、On Error Resume Next文を入れることで、
On Error Resume Next
ActiveWorkbook.SaveAs Filename:=bk_name
同じ名前が存在していたときに表示される、「この場所に'○○'という名前のファイルが既にあります。置き換えますか?」メッセージボックスで、[いいえ]や[キャンセル]が押されたときに発生するエラーを無視しています。
[はい]が押されたときには上書き保存され、[いいえ]や[キャンセル]が押されたときにはエラーメッセージが表示されなくなり、もちろん保存もされません。
事前にチェックしてオリジナルの確認メッセージを表示するサンプルマクロ
上記のマクロでは、[いいえ]と[キャンセル]が同じ動きになり、そこが気持ち悪いと感じる方もいらっしゃるようです。
上書き保存するか、しないかの二択なわけですから、[はい][いいえ]または[OK][キャンセル]の二択のメッセージを表示してやるといいでしょう。
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
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
- Newer:Word 2013・2010・2007でセクション番号を表示する
- Older:VBAでカーソル位置のセクション番号を取得する-Information(wdActiveEndSectionNumber)
Home » エクセルマクロ・Excel VBAの使い方 » Workbooks・Workbook » 保存時に同じ名前のファイルがあったときに確認して上書き保存するExcelマクロ