CopyFile・CopyFolderメソッド

CopyFile・CopyFolderメソッドは、ファイルやフォルダをコピーするメソッドです

'上書きするコピー
bhFSO.CopyFile "ファイル拡張子までのパス", "コピー先のフォルダ名までのパス"
'上書きしないコピー(既存がある場合はエラー発生)
bhFSO.CopyFile "パス文字列\*.txt", "\コピー先のフォルダ名までのパス", False

CopyFile(ファイルのコピー)

'上書きするコピー
bhFSO.CopyFolder "元のフォルダパス", "コピー先のフォルダパス"
'上書きしないコピー(既存がある場合はエラー発生)
bhFSO.CopyFolder "元のフォルダパス", "コピー先のフォルダパス", False

CopyFolder(フォルダのコピー)

FileSystemObjectを使用して、フォルダをコピーするには「CopyFolder」メソッドを使用し、ファイルをコピーするには「CopyFile」メソッドを使用します

FileSystemObjectでのコピーであれば、ワイルドカードにより対象を複数にして一括で処理を行うことができます
また、フォルダのコピーに関しては、中にあるファイルも全てそのままコピーされるのでバックアップ処理にはうってつけです

メソッドの書式

引数(太字は必須引数)(2つのメソッドは引数が同じ)
CopyFile source, destination, overwrite
CopyFolder source, destination, overwrite

「source」は対象となるファイルの絶対パスを指定します、ワイルドカードの使用が出来ますので複数のファイルを一括で指定することが可能です

「destination」はコピー先のフォルダ名までの絶対パスを指定します
上記2つの引数は必須で、指定したパスが見つからない場合はエラーが発生します
特にワイルドカード使用時は注意が必要です

「overwrite」はコピー先に同名のファイルやフォルダがあった場合に上書きするかどうかの設定です。
省略可能で、省略時はTrueが指定され上書きが許可されます

ファイルは上書きされれば当然既存のものはなくなります
フォルダに関しては差分が更新される形になります

コピー元に2つのファイルがある状態で、コピー先にその2つと別のファイルがあった場合は、重複するファイルが上書きされます
重複していないファイルは削除されたりはせずそのままの状態になります

つまり、コピーしてもコピー元と全く同じファイル内容にならない可能性があるということです

完全にコピー元と同じ内容にする場合は、コピー先を一度削除してからコピーするようにします
削除にはFileSystemObjectのDeleteFolderメソッドを使用します
RmDirステートメントではフォルダ内にデータが存在すると削除が行えないのでFileSystemObjectのほうが便利です

コピーしたファイル・フォルダを変数に代入して扱う

'上書きコピーしてそのファイルを変数に代入
Dim bhFSOFile As Object
Set bhFSOFile = bhFSO.CopyFile("ファイル拡張子までのパス", "コピー先のフォルダ名までのパス")

また、コピーしたファイルやフォルダにさらに処理を続ける場合は、このメソッドを変数に代入させることで利便性が上がります
取得させる場合は、関数のように引数を「()」で囲むようにすればいいだけです