クラスを使用してファイル名変更を作ってみた

タイトルのマクロは、以下。指定されたフォルダ内でファイルの名前を変更するためのものです。新しいファイル名には元の拡張子が維持されます。

'****************************
'* ファイル名変更、拡張子は同じ。20230224
'* myFileName:ファイル名
'* myFileRenameWoExtension:変更後のファイル名、拡張子除く
'* myPath:ファルダ
Sub FileRenameSameExtension(myFileName As String, myFileRenameWoExtention As String, myPath As String)
    Dim F As FileObj: Set F = New FileObj
    
    ' フォルダの確認
    If Not F.ExistFolder(myPath) Then
        MsgBox "フォルダが確認できませんでした"
        Exit Sub
    End If
    ' ファイルの確認
    If Not F.ExistFile(myPath & "\" & myFileName) Then
        MsgBox "ファイル名が確認できませんでした"
        Exit Sub
    End If
    ' 変更する同名ファイルがないかの確認
    F.Name = myPath & "\" & myFileName
    Dim myFileRename As String: myFileRename = myFileRenameWoExtention & "." & F.Extension
    If F.ExistFile(myPath & "\" & myFileRename) Then
        MsgBox "移動先に同名のファイルがあります"
        Exit Sub
    End If
    
    ' ファイル名変更
    F.Rename (myFileRename)
    
    Set F = Nothing
    
End Sub

各部分の説明

サブルーチンの宣言:

Sub FileRenameSameExtension(myFileName As String, myFileRenameWoExtention As String, myPath As String)
  • myFileName は変更するファイルの名前。
  • myFileRenameWoExtention は新しいファイル名(拡張子を除く)。
  • myPath はファイルが存在するフォルダのパス。

FileObj クラスのインスタンス化:

Dim F As FileObj: Set F = New FileObj
  • FileObj クラスの新しいインスタンスを作成します。このクラスにはフォルダやファイルの存在確認、ファイル名の変更などの機能が含まれています。

フォルダの確認:

If Not F.ExistFolder(myPath) Then
    MsgBox "フォルダが確認できませんでした"
    Exit Sub
End If
  • ExistFolder メソッドを使用して、myPath フォルダが存在するかを確認します。存在しない場合はエラーメッセージを表示してサブルーチンを終了します。

ファイルの確認:

If Not F.ExistFile(myPath & "\" & myFileName) Then
    MsgBox "ファイル名が確認できませんでした"
    Exit Sub
End If
  • ExistFile メソッドを使用して、myPath フォルダ内に myFileName ファイルが存在するかを確認します。存在しない場合はエラーメッセージを表示してサブルーチンを終了します。

変更する同名ファイルがないかの確認:

F.Name = myPath & "\" & myFileName
Dim myFileRename As String: myFileRename = myFileRenameWoExtention & "." & F.Extension
If F.ExistFile(myPath & "\" & myFileRename) Then
    MsgBox "移動先に同名のファイルがあります"
    Exit Sub
End If
  • Name プロパティを使用して、元のファイルのフルパスを設定します。
  • Extension プロパティを使用して、元のファイルの拡張子を取得し、それを新しいファイル名に付加します。
  • ExistFile メソッドを使用して、myPath フォルダ内に新しいファイル名と同名のファイルが存在しないかを確認します。存在する場合はエラーメッセージを表示してサブルーチンを終了します。

ファイル名の変更:

F.Rename (myFileRename)
  • Rename メソッドを使用して、ファイル名を新しいファイル名に変更します。

FileObj クラスのインスタンスの解放:

Set F = Nothing
  • FileObj クラスのインスタンスを解放します。

使用例

以下の使用例では、「example.txt」ファイルの名前を「new_example.txt」に変更します。

Sub ExampleUsage()
    ' ファイル名を変更
    Call FileRenameSameExtension("example.txt", "new_example", "C:\TEMP")
End Sub

この ExampleUsage サブルーチンを実行すると、FileRenameSameExtension サブルーチンが呼び出され、「C:\TEMP」フォルダ内の「example.txt」ファイルが「new_example.txt」に変更されます。各ステップで存在確認が行われ、問題があればエラーメッセージが表示されます。

FileObj クラスは、以下参照願います

Follow me!