フォルダのコピー

フォルダをコピーする。

FileSystemObjectのCopyFolderメソッドを利用してフォルダをコピーさせることができます。

CopyFolderには下記の引数が設定できます。

引数名説明                    省略
第1引数sourceコピー元の指定不可
第2引数destinationコピー先の指定不可
第3引数overwrite同名フォルダがある場合の判定
True:上書き(規定値)、False:上書きしない

コピーする時にフォルダの名前を変更してコピーさせることも可能です、その場合は第2引数の末尾に”\”を付けない形で指定します。
名前を変更しないでコピーさせる場合は第2引数の末尾に”\”が必要になります。
またワイルドカードを使用して複数のフォルダをまとめてコピーさせることもできます。

コピー先に同名フォルダに既に存在する場合、上書きするかどうかを第3引数に True または False を指定することでできます。True が「上書きをする」になります。
上書きした場合、コピー元とコピー先のフォルダ内にあったファイルはコピー先に統合されます。

●同じフォルダ名でコピー

'******************************************************************
' フォルダのコピー(同じフォルダ名)
'******************************************************************
Sub Main_CopyFolder_SameName()
    
    'コピー元の指定
    Dim sFolderSrc As String
    sFolderSrc = "C:\VBA\FSO\コピー元"

    'コピー先の指定、第2引数の末尾に”\”が必要
    Dim sFolderDst As String
    sFolderDst = "C:\VBA\FSO\コピー先\"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'フォルダのコピー
    Call oFso.CopyFolder(sFolderSrc, sFolderDst)

End Sub

●フォルダ名を変更してコピー

'******************************************************************
' フォルダのコピー(別名に変更してコピー)
'******************************************************************
Sub Main_CopyFolder_ChangeName()
    
    'コピー元の指定
    Dim sFolderSrc As String
    sFolderSrc = "C:\VBA\FSO\コピー元"

    'コピー先(変更後のフォルダ名)の指定、第2引数の末尾に”\”は不要
    Dim sFolderDst As String
    sFolderDst = "C:\VBA\FSO\フォルダ名変更"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")
    
    'フォルダのコピー
    Call oFso.CopyFolder(sFolderSrc, sFolderDst)

End Sub

●複数のフォルダをまとめてコピー

'******************************************************************
' フォルダのコピー(まとめてコピー)
'******************************************************************
Sub Main_CopyFolder_ALL()
    
    'コピー元の指定(ワイルドカード使用)
    Dim sFolderSrc As String
    sFolderSrc = "C:\VBA\FSO\コピー元*"

    'コピー先の指定
    Dim sFolderDst As String
    sFolderDst = "C:\VBA\FSO\コピー先\"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")

    'フォルダのコピー
    Call oFso.CopyFolder(sFolderSrc, sFolderDst)

End Sub

●同名フォルダがあれば上書きしてコピー

'******************************************************************
' フォルダのコピー(同名フォルダを上書き)
'******************************************************************
Sub Main_CopyFolder_Update()

    'コピー元の指定
    Dim sFolderSrc As String
    sFolderSrc = "C:\VBA\FSO\コピー元"

    'コピー先
    Dim sFolderDst As String
    sFolderDst = "C:\VBA\FSO\フォルダ名変更"

    'FileSystemObjectの作成
    Dim oFso As Object
    Set oFso = CreateObject("Scripting.FileSystemObject")

    'フォルダのコピー(同名フォルダがある場合は上書く)
    Call oFso.CopyFolder(sFolderSrc, sFolderDst, True)

End Sub