ファイルのコピーを作成する(FileSystemObjectオブジェクトのCopyFileメソッド)
ファイルのコピーを作成する
FileSystemObject
オブジェクトを用いる。
ファイルのコピーを作成するFunction
FileSysetmObject
オブジェクトのCopyFile
メソッドをラップする。
参照設定でMicrosoft Scripting Runtime
にチェックを入れておく。
リスト1 標準モジュール
Public Function createCopyFile(ByVal oldFullName As String, _ ByVal newFullName As String) As Boolean createCopyFile = False If Dir(oldFullName, vbNormal) = "" Then Exit Function On Error Resume Next Err.Clear Dim fileSystemObject_ As New FileSystemObject Call fileSystemObject_.CopyFile(Source:=oldFullName, _ Destination:=newFullName) If Err.Number > 0 Then Exit Function On Error GoTo 0 createCopyFile = True End Function
元ファイルのフルパスと新ファイルのフルパスを引数として処理をする。ファイルコピーに成功したらTrue
、失敗したらFalse
を返すようにした。
使ってみる
F:\お持ち帰り\ち~んw
フォルダ内に、このようにたくさんのファイルが入っている。
シートのD1セルに、コピーを作成したいファイルがあるフォルダのパスが入力されている。
で、シートのA列にこんなふうにファイル名が列挙されている。
この状態で、シートA列のファイル名が入っているセルを全て選択し、次のコードで実験。
リスト2 標準モジュール
Public Sub testCreateCopyFile() Dim targetFolderPath As String targetFolderPath = Sheet1.Range("D1").Value Dim targetCell As Range For Each targetCell In Selection With targetCell If Not createCopyFile( _ targetFolderPath & .Value, _ targetFolderPath & "backup\" & .Value) Then Exit Sub End With Next End Sub
元のファイルがあるF:\お持ち帰り\ち~んw
フォルダ内のbackup
フォルダ内に、全てのファイルのコピーを作成するコード。
実行結果
F:\お持ち帰り\ち~んw\backup
フォルダを開けてみると、
この通り、全てのファイルがコピーされている。
おわりに
Webページにupするために、大量のファイル名を1バイト文字のみのファイル名に変換する必要があって、簡単なファイル名変換ツールを作った。そのとき、バックアップを取る機能を付けるために、久しぶりにFileSystemObject
オブジェクトを使ったので、覚書的に書き残すことにした。