Home » エクセルマクロ・Excel VBAの使い方 » Workbookオブジェクト » VBAで保存時に同じ名前のファイルがあったときは中断する

VBAで保存時に同じ名前のファイルがあったときは中断する

対象:Excel2007, Excel2010, Excel2013

WSH(Windows Scripting Host)を使ってデスクトップのフルパスを取得してアクティブなブックをデスクトップに保存するマクロをご紹介しました。

このマクロに限らず、保存を行うマクロをVBAで作るときには、考えておかなければいけないことは、いろいろとあります。

いろいろある中でまず考えるべきは、同じ名前のファイルが存在していたときにどうするか、でしょう。

[スポンサードリンク]

保存時に同じ名前のファイルがあったときの挙動

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

このメッセージで[はい]を選択した場合は、上書き保存が行われます。

問題は[いいえ]と[キャンセル]です。
[いいえ]でも[キャンセル]でも、エラーが発生してしまうのです。

これをどうするのかは様々な仕様が考えられます。
事前に同名のファイルが存在しないかチェックする仕様。強制的に上書き保存してしまう仕様。ファイル名に枝番をつけて保存する仕様などなど。

Dir関数で事前にチェックして同名ファイルがあったときは中断する

無難なのは、同じ名前のファイルが存在しないかを事前にチェックして、存在していた場合はマクロを終了してしまうという仕様でしょうか。


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

 If Dir(bk_name) <> "" Then
  MsgBox "同じ名前のブックがデスクトップに存在するのでマクロを中断します。"
  Exit Sub
 End If

 ActiveWorkbook.SaveAs Filename:=bk_name
End Sub

デスクトップのフルパスを取得して、パスを含んだファイル名を作成する処理の考え方は、既にご紹介しているマクロと同じです。
 Set wsh = CreateObject("WScript.Shell")
 dt_path = wsh.SpecialFolders("desktop")
 Set wsh = Nothing
 bk_name = ActiveWorkbook.Name
 bk_name = dt_path & "\" & bk_name

上記の処理で作られた、パス込みのファイル名を、Dir関数の引数に指定して同じ名前のファイルが存在しないかを調べます。
 If Dir(bk_name) <> "" Then

Dir関数は、ファイルが存在していない場合は、空白文字列を返します。
ですから、Dir関数の戻りが空白でない場合は、同じ名前のファイルが存在していることになります。

ファイルの存在確認は、FileSystemObjectのFileExistsメソッドでもできますが、今回のような処理なら、わざわざFileSystemObjectをCreateObjectしなくても、VBA標準のDir関数で十分でしょう。

Dir関数の戻りが空白でない場合、同じ名前のファイルが存在している場合に、メッセージを表示してマクロを終了しています。
  MsgBox "同じ名前のブックがデスクトップに存在するのでマクロを中断します。"
  Exit Sub

マクロを作る側からすると、この事前チェックして中断する仕様が一番無難ですが、マクロを使う側からは、いろいろと要望も出てきます。他の仕様にした場合の具体的なマクロは、別記事としてご紹介します。

[スポンサードリンク]

Home » エクセルマクロ・Excel VBAの使い方 » Workbookオブジェクト » VBAで保存時に同じ名前のファイルがあったときは中断する

TrackBack:2

TrackBack URL
保存時に同じ名前のファイルがあった場合に強制的に上書きするExcelマクロ from インストラクターのネタ帳
Excel(エクセル)マクロで保存を行うときに同じ名前があったときに、強制的に上書きしてしまう方法をご紹介しています。
保存時に同じ名前のファイルがあったときに確認して上書き保存するExcelマクロ from インストラクターのネタ帳
対象:Excel2007, Excel2010, Excel2013 Save...

Home » エクセルマクロ・Excel VBAの使い方 » Workbookオブジェクト » VBAで保存時に同じ名前のファイルがあったときは中断する

「Workbookオブジェクト」の記事一覧

検索


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

.