FileCopy関数、FileCopyステートメント
FileCopy関数、または、FileCopyステートメントを使うとファイルのコピーが行えます。
コピー後のファイル名の指定も可能です。
FileCopy関数、FileCopyステートメントはどちらも使い方は同じです。エラーの発生条件も同じです。違いは構文だけです。
構文
関数
Sub FileCopy(Source As String, Destination As String)
ステートメント
FileCopy Source, Destination
Source | コピー元のファイルのファイルパスを指定します。
ファイル名だけを指定した場合はカレントディレクトリのファイルが対象になります。 |
Destination | コピー先のファイルのファイルパスを指定します。
コピー元と別の名前を付けることも可能です。 ファイル名だけを指定した場合はカレントディレクトリにコピーします。 コピー先のフォルダに同じファイル名がある場合は上書きになります。 ファイル名を指定しなかった場合はエラーになります。 |
よくあるエラー
1. コピー先のファイル名未設定でのエラー
よくあるエラーがコピー先のファイル名を書かない場合のエラーです。
コピー先のフォルダ+¥マークあり
1 |
FileCopy "C:\abc\成績.xlsx", "C:\abc\a\" |
コピー先のフォルダ+¥マークなし
1 |
FileCopy "C:\abc\成績.xlsx", "C:\abc\a" |
上記のようにコピー先でファイルを指定しなかった場合はエラー52、75、76などが条件によって発生します。
感覚的にはファイル名を指定しなかった場合は元ファイル名のままコピーしてほしいと思ってしまいますが、残念ながらそこの融通が利きません。
2. コピー元ファイルが開いている場合はエラー
開いているファイルをコピーしようとするとエラーになります。
読み込みのロックが掛かっている場合も同様にエラーになります。
3. コピー元のファイルがない場合はエラー
これは当たり前のエラーですが、コピー元のファイルがそもそも存在しない場合はエラーになります。
上書きコピーのチェック
FileCopyは同じファイル名がコピー先にあると無条件で上書きを行います。
本当に上書きしていいかどうかのチェックや、上書きは回避したい場合には事前にチェックが必要です。
コピー先のファイルが存在するかどうかは後述のサンプルコードでDir関数を使って行っています。
ファイル存在チェックについての詳細は「VBAでファイルの存在をチェックする」をご参照ください。
サンプルコード
1. 単純なコピー
FileCopyステートメントとFileCopy関数の単純なサンプルです。
コピー先に同じ名前のファイルがあっても上書きします。
1 2 3 4 5 6 7 8 9 10 11 |
Sub FileCopyTest() Dim a Dim b a = "V:\test\a.txt" b = "V:\test\b.txt" Call FileCopy(Source:=a, Destination:=b) FileCopy a, b End Sub |
2. 上書き判定を入れたコピー
Dir関数を使ってコピー先のファイルが存在しているか確認し、存在する場合はメッセージボックスを表示します。
メッセージボックスで「はい」が押された場合はコピーを行いますが、「いいえ」の場合はコピーを行いません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub FileCopyTest2() Dim a Dim b a = "V:\test\a\a.txt" b = "V:\test\b\atxt" '// コピー先ファイルが存在する場合 If (Dir(b) <> "") Then Dim ret ret = MsgBox("上書きしますか?", vbYesNo) If (ret <> vbYes) Then Exit Sub End If End If '// コピー FileCopy a, b End Sub |