
FileSystemObjectのCopyFolderメソッドについてです。
Menu
CopyFolderメソッド
概要
フォルダーをコピーすることができます。
構文
FileSystemObject.CopyFolder source , destination [overwrite]
[ ]は省略可という意味
CopyFolderメソッドの引数
引 数 | 必須 / 省略可 | 説 明 |
コピー元フォルダー | 必須 | ・コピー元のフォルダーパスを指定。 ・ワイルドカードで複数コピー可。 (コピー元のフォルダーがない場合はエラー) |
コピー先フォルダー (destination) | 必須 | ・コピー先のフォルダーパスを指定。 ・ワイルドカード不可。 (コピー先のフォルダーがない場合はエラー) |
上書き (overwrite) | 省略可 | ・既存のフォルダーを上書きするかブール値で指定。 |
VBAサンプル
通常コピー
コピー先フォルダーに、コピー元のフォルダーが存在しない場合のコピー(True,FalseどちらでもOK)
1 2 3 4 5 6 7 | Sub フォルダーをコピー() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\Folder1", "D:\FSO\Folder2\" End Sub |
上書きコピー
コピー先フォルダーに、コピー元のフォルダーが存在する場合、上書きコピー。
(True指定)
※False指定(上書きしない)した場合はエラーがでます。
1 2 3 4 5 6 7 | Sub フォルダーを上書きコピー() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\Folder1", "D:\FSO\Folder2\", True End Sub |
全てのサブフォルダーをコピー(ワイルドカード①)
全てのサブフォルダをワイルドカードで指定して、コピー先フォルダーにコピー。
1 2 3 4 5 6 7 | Sub ワイルドカード1() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\*", "D:\test\", True End Sub |
複数の指定したフォルダーをコピー(ワイルドカード②)
サブフォルダーの*folder*(ワイルドカード)が含まれる複数フォルダを、コピー先フォルダーにコピー。
1 2 3 4 5 6 7 | Sub ワイルドカード2() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\*folder*", "D:\test\", True End Sub |
フォルダーコピーのエラー例
コピー元フォルダーが存在しない場合のエラー
コピー元のフォルダー(Folder10)が存在しない場合のエラー
(パスが見つかりません)。
1 2 3 4 5 6 7 | Sub エラー①() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\Folder10", "D:\FSO\Folder2\", True End Sub |
コピー元フォルダー(Folder10)がないためエラーがでます。
コピー先フォルダーが存在しない場合のエラー
コピー先のフォルダー(Folder20)が存在しない場合のエラー
(パスが見つかりません)。
1 2 3 4 5 6 7 | Sub エラー③() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\Folder1", "D:\FSO\Folder20\", False End Sub |
コピー先フォルダー(Folder20)がないためエラーがでます。
コピー先にコピー元のフォルダーが存在する場合のエラー
コピー先フォルダーに、コピー元のフォルダーが存在する場合、上書きコピーをしないのFalse指定した場合のエラー
(既に同名のファイルが存在しています)。
1 2 3 4 5 6 7 | Sub エラー②() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\Folder1", "D:\FSO\Folder2\", False End Sub |
False指定で上書きができないためエラーがでます。
(Trueの場合は上書きされるのでエラーは出ません)
コピー元のフォルダをコピー元の直下にコピー
コピー元のフォルダを、コピー元の直下にコピーはエラー
(プロシージャの呼び出し、または引数が不正です)。
1 2 3 4 5 6 7 | Sub エラー④() Dim fso As Object Set fso = CreateObject("Scripting.FileSystemObject") fso.copyFolder "D:\FSO\Folder1", "D:\FSO\Folder1\", True End Sub |
ちなみに手動でコピぺも不可です。