FileSystemObjectのMoveFolderメソッド
FileSystemObjectのMoveFolderメソッドは、指定したフォルダパスを別のフォルダ配下に移動させます。移動元のフォルダ内にあるファイルやフォルダも一緒に移動します。
移動先のフォルダパスの最下層フォルダが移動先のフォルダ名になるため、このフォルダ名を移動元のフォルダ名と別名にするとフォルダの移動とフォルダ名の変更が同時に行えます。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Sub MoveFolder(Source As String, Destination As String)
Source | 移動元フォルダパスを指定します。
最下層のフォルダ名には*でのワイルドカードの指定が可能です。最下層以外の階層でのワイルドカード指定はできません。 フォルダパスの右端にパス区切りの¥マークは付けるとエラー76が発生します。 |
Destination | 移動先フォルダパスを指定します。
右端のパス区切りの¥マークはある場合は移動元のフォルダ名がその配下に移動され、ない場合は最下層フォルダ名が移動先のフォルダ名になります。 移動先のフォルダパスが存在しない場合はエラー76が発生します。 |
エラー対応
第一引数の右端に¥マークがあったり、第二引数のフォルダパスが存在しない場合にMoveFolderメソッドを実行すると「実行時エラー’76’: パスが見つかりません。」のエラーが発生します。
このようなエラーが発生すると通常はメッセージボックスが表示され、処理はそこで止まってしまいます。
処理を止めないようにするためにはエラー処理を適切に行う必要があります。
具体的には「On Error Goto XXX」でエラー発生時にエラーラベルまで処理を飛ばしたり、「On Error Resume Next」でエラーが発生しても処理を継続するようにしておいたほうがよいでしょう。
よくあるミス
実際にはフォルダが存在しているのにエラー76(パスが見つかりません)が発生することがあります。
その理由は2つあります。
1つは、第一引数の移動元フォルダパスの右端のパス区切り文字¥があるためです。¥マーク自体もフォルダ名として判定されてしまいエラーになります。
OK:「”C:¥ProgramData¥aaa”」
NG:「”C:¥ProgramData¥aaa¥”」
もう1つが、第二引数の移動先フォルダパスが存在しない場合です。終端にパス区切り文字の¥があるかどうかで挙動が変わります。¥があれば直前のフォルダ配下に移動元フォルダ名のまま移動し、¥がなければ最下層フォルダ名に移動元フォルダ名からリネームされて移動します。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
フォルダを移動するサンプルです。気をつける点は第一引数の終端にパス区切り文字を付けないことです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
Sub FileSystemObjectMoveFolder() On Error GoTo ERR_LABEL Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim sSrc As String '// 移動元フォルダパス Dim sDst As String '// 移動先フォルダパス '// パス設定 sSrc = "C:\aaa\bbb" sDst = "C:\aaa\c\" '// cフォルダの配下にbbbフォルダを移動 '// フォルダ移動 Call fso.MoveFolder(sSrc, sDst) ERR_LABEL: '// エラー発生時 If Err.Number <> 0 Then '// エラー内容を出力 Debug.Print Err.Number & " " & Err.Description End If End Sub |
FileSystemObjectのオブジェクト変数に対して、「Set fso = Nothing」のようなコードがありませんが、なくても問題ありません。
詳細については「VBAでのFileSystemObjectとTextStreamの使い方」をご参照ください。