VBATips

保存するファイル名が重複しないように連番をつけて返す【パーツ化】【ExcelVBA】

保存するファイル名が重複しないように連番をつけたい

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と日付時刻を付与したファイル名で保存する場合も多いです。

関連記事

コメント

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