クラスを使用してファイル名変更を作ってみた
タイトルのマクロは、以下。指定されたフォルダ内でファイルの名前を変更するためのものです。新しいファイル名には元の拡張子が維持されます。
'****************************
'* ファイル名変更、拡張子は同じ。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」に変更されます。各ステップで存在確認が行われ、問題があればエラーメッセージが表示されます。