FileSystemObjectのCopyFolderメソッド
FileSystemObjectのCopyFolderメソッドは、フォルダを別の場所にコピーします。コピー元のフォルダの中にあるフォルダやファイルも一緒にコピーされます。
指定フォルダ配下をワイルドカード指定することで複数のフォルダをまとめてコピーすることが可能です。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Sub CopyFolder(Source As String, Destination As String, [OverWriteFiles As Boolean = True])
Source | コピーするフォルダを指定します。
最下層のフォルダ名には*でのワイルドカードの指定が可能です。最下層以外の階層でのワイルドカード指定はできません。フォルダパスの右端にパス区切りの¥マークは付けるとエラー76が発生します。 |
Destination | コピー先のフォルダを指定します。右端の¥マークはあってもなくてもどちらでも構いません。 |
OverWriteFiles (省略可) |
コピー先のフォルダに既に同じ名前のフォルダが存在する場合に上書きするかどうかを指定します。
上書きする場合はTrueを指定し、上書きしない場合はFalseを指定します。省略時はTrue扱いになります。 |
エラー対応
CopyFolderメソッド実行時に「実行時エラー’76’: パスが見つかりません。」のエラーが発生することがあります。
このようなエラーが発生すると通常はメッセージボックスが表示され、処理はそこで止まってしまいます。
処理を止めないようにするためにはエラー処理を適切に行う必要があります。
具体的には「On Error Goto XXX」でエラー発生時にエラーラベルまで処理を飛ばしたり、「On Error Resume Next」でエラーが発生しても処理を継続するようにしておいたほうがよいでしょう。
よくあるミス
実際にはフォルダが存在しているのにエラー76が発生することがあります。
それは、第一引数の右端のパス区切り文字¥があるためです。こういうのは結構はまります。
OK:「”C:¥ProgramData¥aaa”」
NG:「”C:¥ProgramData¥aaa¥“」
なお、コピー先のフォルダパスの右端は¥があってもなくても問題ありません。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
CopyFolderメソッドを使ってフォルダをコピーするサンプルです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
Sub FileSystemObjectCopyFolder() Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim sFolderFrom '// コピー元フォルダパス Dim sFolderTo '// コピー先フォルダパス '// コピー元フォルダパスを設定(右端の¥は不要) sFolderFrom = "C:\aaa\a" '// コピー先フォルダパスを設定 sFolderTo = "C:\bbb" '// フォルダコピー Call fso.CopyFolder(sFolderFrom, sFolderTo, True) End Sub |
FileSystemObjectクラスのオブジェクト変数に対して、「Set fso = Nothing」のようなコードがありませんが、なくても問題ありません。
詳細については「VBAでのFileSystemObjectとTextStreamの使い方」をご参照ください。