今回は「FileSystemObject」オブジェクトを使用してフォルダをコピーする方法をご説明します。
「FileSystemObject」オブジェクトとは、ドライブ、フォルダ、ファイルを操作する事ができるオブジェクトです。
「FileSystemObject」オブジェクトの使い方も併せてご説明します。
他のファイル/フォルダの操作は次の記事をご覧ください。
- FileSystemObjectでファイルをコピー
- FileSystemObjectでファイルを移動
- 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.CopyFolder source, destination[, overwrite]」と書きます。
引数の説明
【source】
コピー元のフォルダパスを指定します。
ワイルドカードを使用する事ができます。
sourceは省略する事ができません。
指定したフォルダが存在しない場合、エラーが発生します。
【destination】
コピー先のフォルダパスを指定します。
ワイルドカードを使用する事ができず、省略もできません。
コピー先フォルダパスをコピー元のフォルダパスと変更する事で、フォルダ名の変更が可能です。
【overwrite】
コピー先に同一フォルダが存在する場合に、True/Falseで上書きするか指定します。
Trueを指定すると上書きし、Falseを指定すると上書きしませんが、同じフォルダ名があるとエラーになります。
省略することが可能で、省略するとTrueが指定されます。
3.サンプルコード
コピー元と異なるコピー先を指定してコピーする
フォルダ名をそのまま、コピー元とは異なるパスを指定してコピーします。
Sub Sample1()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source:="C:\Sample1\TEST", Destination:="C:\Sample2\TEST"
Set FSO = Nothing
End Sub
フォルダ名を変更してコピーする
コピー元と同一であっても、異なっていてもフォルダ名を変更する事ができます。
Sub Sample2()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source:="C:\Sample1\TEST", Destination:="C:\Sample1\TEST1"
Set FSO = Nothing
End Sub
複数のフォルダをコピーする
ワイルドカードを使用して、1度に複数のフォルダをコピーします。
Sub Sample3()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder Source:="C:\Sample1\TEST*", Destination:="C:\Backup\"
Set FSO = Nothing
End Sub
エラーを回避する
エラーコードとエラー結果
コピー元に指定したフォルダが存在しない場合、エラーが発生します。
Sub Sample4()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder "C:\Sample1\TESTO", "C:\Sample1\TEST"
Set FSO = Nothing
End Sub
また、「overwrite」でFalseを指定すると同じフォルダ名があるとエラーになります。
Sub Sample5()
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
FSO.CopyFolder "C:\Sample1\TEST", "C:\Sample1\TEST", overwritefiles:=False
Set FSO = Nothing
End Sub
エラーを回避するサンプルコード
指定したフォルダが存在するか、同一フォルダ名が存在するかの2つのエラー回避が組み込まれています。
Sub Sample6()
Dim FSO As Object
Dim myFolder As String
Set FSO = CreateObject("Scripting.FileSystemObject")
myFolder = "C:\Sample1\TEST"
If Dir(myFolder, vbDirectory) = "" Then 'ファイルの存在チェック
MsgBox "フォルダが存在しません。"
Else
'同一フォルダ名が存在する場合回避
On Error GoTo ErrLabel
FSO.CopyFolder Source:=myFolder, Destination:="C:\Sample1\TEST", overwritefiles:=False
End If
Set FSO = Nothing
Exit Sub
ErrLabel:
MsgBox Err.Description
End Sub
コードの説明
「If Dir(myFolder, vbDirectory) = “” Then」で指定したフォルダが存在するか判定しています。
存在しない場合はメッセージボックスが表示されます。
「On Error GoTo ErrLabel」で、フォルダを指定した場所に格納しようとした際に、同じフォルダが存在した場合の回避として、エラーが発生した場合は「ErrLabel:」まで実行がスキップされ、エラー内容がメッセージボックスに表示されます。
エラー処理については「「On Error」でエラー処理」をご覧下さい。