これでほとんどの方法が得られるはずです。「If UCase(Right(objFile.Name, 4)) = ".VBP" Then」というフレーズの正しい置換を見つける必要があります。
また、宛先ファイルには「.bak」が追加されています。それを削除する必要があります。
ファイルのリストを Dictionary に配置する理由は、現時点ではわかりません。処理されたファイルと処理されなかったファイルのリストを取得できるようにする必要があるほど、プロセスが頻繁に失敗することに関係していたと思います。
Option Explicit
Dim dicFiles
Set dicFiles = CreateObject("Scripting.Dictionary")
Private Sub AddFile(objFile)
If dicFiles Is Nothing Then
Set dicFiles = CreateObject("Scripting.Dictionary")
End If
If Not dicFiles.Exists(objFile.Path) Then
dicFiles.Add objFile.Path, "False"
End If
End Sub
Dim strRootPath 'As String
Dim objFSO 'As New FileSystemObject
Dim objFile 'As File
Dim i 'As Integer
Dim iMax 'as integer
strRootPath = "C:\Transfer"
Dim objFolder' As Folder
Set objFSO = CreateObject("Scripting.FileSystemObject")
Set objFolder = objFSO.GetFolder(strRootPath)
'MsgBox "" & objFolder.Files.Count & " files in folder " & objFolder.Path
For Each objFile In objFolder.Files
'MsgBox "Filespec: " & objFile.Name
If UCase(Right(objFile.Name, 4)) = ".VBP" Then
'MsgBox "Adding file " & objFile.Name
AddFile objFile
End If
Next
Dim arrFiles '() As Variant
arrFiles = dicFiles.Keys
'MsgBox "UBound(arrfiles)=" & UBound(arrFiles)
Dim fsIn 'As String
Dim fsOut 'As String
Dim strFilespec 'As String
For i = 0 To UBound(arrFiles)
Set objFile = objFSO.GetFile(arrFiles(i))
strFilespec = arrFiles(i)
fsOut = strFilespec & ".bak"
If objFSO.FileExists(fsOut) Then
objFSO.DeleteFile fsOut, True 'True = Force
End If
fsIn = strFilespec
objFSO.MoveFile fsIn, fsOut
Next
Set objFSO = Nothing