保存するファイル名が重複しないように連番をつけたい
VBAマクロを実行する際、ファイル保存する際、ファイル名が重複していないかどうか知りたい場合があります。
このようなよく使う基本コードはパーツ化して時短するべきです。
保存するファイル名が重複しないように連番をつけるコード
要は、上書き保存する処理前に、バックアップを自動作成処理をしてしまえばよいのです。
'■保存するファイル名が重複しないように連番をつけて取得する
Public Function Call_DuplicateFileName(sPath As String, sName As String) As String
Dim fso As New FileSystemObject '要'参照設定 Microsoft Scripting Runtime
Dim sBase As String: sBase = fso.GetBaseName(sName) 'Book1
Dim sExte As String: sExte = fso.GetExtensionName(sName) '.xlsx
Dim tmp As String: tmp = sName 'Book1.xlsx
If fso.FileExists(sPath & "\" & tmp) Then
Dim i As Long: i = 2
Do
tmp = sBase & " (" & i & ")." & sExte
If fso.FileExists(sPath & "\" & tmp) = False Then Exit Do
i = i + 1
Loop
End If
Call_DuplicateFileName = tmp
End Function
実際の使い方
Public Sub sample()
Dim sFile As String
sFile = Call_DuplicateFileName(ThisWorkbook.Path, "Book1.xlsx")
'存在していなければBook1.xlsx
'存在していれば Book1(2).xlsx→Book1(3).xlsx→Book1(4).xlsxを取得
End Sub
注意点
今回は連番コードでしたが、私は被らないようにyymmdd-hhmmssと日付時刻を付与したファイル名で保存する場合も多いです。



コメント