ファイルのコピーを作成する(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:id:akashi_keirin:20180901210310j:plain

F:\お持ち帰り\ち~んwフォルダ内に、このようにたくさんのファイルが入っている。

f:id:akashi_keirin:20180901210318j:plain

シートのD1セルに、コピーを作成したいファイルがあるフォルダのパスが入力されている。

f:id:akashi_keirin:20180901210325j:plain

で、シートの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フォルダを開けてみると、

f:id:akashi_keirin:20180901210332j:plain

この通り、全てのファイルがコピーされている。

おわりに

Webページにupするために、大量のファイル名を1バイト文字のみのファイル名に変換する必要があって、簡単なファイル名変換ツールを作った。そのとき、バックアップを取る機能を付けるために、久しぶりにFileSystemObjectオブジェクトを使ったので、覚書的に書き残すことにした。