Excel VBA FileSystemObjectでファイルをコピーする

ファイル/フォルダ操作

今回は「FileSystemObject」オブジェクトを使用してファイルをコピーする方法をご説明します。

FileSystemObject」オブジェクトとは、ドライブ、フォルダ、ファイルを操作する事ができるオブジェクトです。

「FileSystemObject」オブジェクトの使い方も併せてご説明します。

他のファイル/フォルダの操作は次の記事をご覧ください。

1.FileSystemObjectの使い方

FileSystemObject」オブジェクトは、ドライブ、フォルダ、ファイルなどを操作する事ができるオブジェクトです。

FileSystemObjectを使用するには「CreateObject」メソッドを使用して次のように記述します。

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FileSystemObjectのメソッド一覧
メソッド操作内容
BuildPathパスの末尾に、指定したフォルダ名を追加したパスを返します
CopyFileファイルをコピーします
CopyFolderフォルダをコピーします
CreateFolder新しいフォルダを作成します
CreateTextFile新しいテキストファイルを作成します
DeleteFileファイルを削除します
DeleteFolderフォルダを削除します
DriveExistsドライブが存在するかどうか調べます
FileExistsファイルが存在するかどうか調べます
FolderExistsフォルダが存在するかどうか調べます
GetAbsolutePathName省略したパスから完全なパス名を返します
GetBaseName拡張子を除いたファイルのベース名を返します
GetDrive指定したDriveオブジェクトを返します
GetDriveName指定したドライブの名前を返します
GetExtensionNameファイルの拡張子を返します
GetFile指定したFileオブジェクトを返します
GetFileName指定したファイルの名前を返します
GetFolder指定したFolderオブジェクトを返します
GetParentFolderName指定したフォルダの親フォルダを返します
GetSpecialFolderシステムが使用する特別なフォルダのパスを返します
GetTempName一時的なファイル名を生成します
MoveFileファイルを移動します
MoveFolderフォルダを移動します
OpenTextFile指定したTextStreamオブジェクトを返します

2.ファイルのコピー

ファイルをコピーする場合、次のように記述します。

FileSystemObject.CopyFile source, destination[, overwrite]

引数の説明

source

コピー元のフォルダパスとファイル名を指定します。

フォルダパスを省略すると、カレントフォルダが指定されます。

destination

コピー先のフォルダパスとファイル名を指定します。

ファイル名を省略すると、sourceで指定したファイル名が指定されます。

また、フォルダパスを省略するとカレントフォルダが指定されます。

overwrite

コピー先に同一ファイル名が存在する場合に、True/Falseで上書きするか指定します。

Trueを指定すると上書きし、Falseを指定すると同じファイル名があるとエラーになります。

念のためエラー処理を組み込むことをおすすめします。

省略することが可能で、省略するとTrueが指定されます。

3.サンプルコード

コピー元、コピー先をフルパスで指定してコピーするコード

次のコードは同一ファイル名が存在する場合エラーとなり、メッセージが表示されます。

エラーを回避するために「On Error GoTo ErrLabel」でエラー発生時に、「ErrLabel:」にジャンプするコードを組み込みます。

エラー処理の詳細については「「On Error」でエラー処理」をご覧下さい。

Sub Sample1()

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

On Error GoTo ErrLabel
    
    FSO.CopyFile Source:="C:\Sample\Book1.xlsx", Destination:="C:\Sample\Book2.xlsx", overwritefiles:=False
    
    Exit Sub
    
ErrLabel:

    MsgBox Err.Description

End Sub

エラーとなった場合次のようなメッセージが表示されます。

カレントフォルダを指定してコピーするコード

カレントフォルダの指定方法

共有ネットワークでも「.CurrentDirectory = “C:\Sample\”」でカレントフォルダを指定しています。

本来カレントフォルダの指定は「ChDirプロパティ」を使用しますが、共有ネットワーク上のフォルダに対応できるように「CreateObject(“WScript.Shell”)」を使用しています。

次のように記述して指定します。

With CreateObject("WScript.Shell")
    
    .CurrentDirectory = "C:\Sample\"
    
End With
コピーするサンプルコード

カレントフォルダを指定してコピーするサンプルコードです。

Sub Sample2()

Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")

With CreateObject("WScript.Shell")
    
    .CurrentDirectory = "C:\Sample\"
    
End With

On Error GoTo ErrLabel
    
    FSO.CopyFile Source:="Book1.xlsx", Destination:="Book2.xlsx", overwritefiles:=False
    
    Exit Sub
    
ErrLabel:

    MsgBox Err.Description

End Sub
タイトルとURLをコピーしました