FileSystemObjectのMoveFileメソッド
FileSystemObjectのMoveFileメソッドは、ファイルを別の場所に移動させます。移動元と移動先を同じフォルダでファイル名を別にするとファイル名の変更になります。
既に移動先に同じ名前のファイルがある場合は実行時エラー58「既に同名のファイルが存在しています」が発生します。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Sub MoveFile(Source As String, Destination As String)
Source | 移動するファイルパスを指定します。ファイル名だけを指定した場合はカレントディレクトリのファイルが対象になります。
ファイル名には*(任意の1文字以上)や?(任意の1文字)でのワイルドカード指定が可能です。 |
Destination | 移動先のパスを指定します。フォルダパスを指定する場合は右端に\を指定します。フォルダパスでの指定の場合は移動元のファイル名のまま移動します。
ファイル名を指定した場合はファイル名が移動元とは別のファイル名にすることも可能です。移動元と同じフォルダでファイル名だけが異なる場合は、ファイル名の変更になります。 |
エラー対応
移動先のファイル名が既に存在していると実行時エラー58「既に同名のファイルが存在しています」が発生します。
このようなエラーが発生すると通常はメッセージボックスが表示され、処理はそこで止まってしまいます。
処理を止めないようにするためにはエラー処理を適切に行う必要があります。
具体的には「On Error Goto XXX」でエラー発生時にエラーラベルまで処理を飛ばしたり、「On Error Resume Next」でエラーが発生しても処理を継続するようにしておいたほうがよいでしょう。
よくあるミス
MoveFileメソッドでのよくあるミスが移動先のフォルダを指定する場合の\の付け忘れです。
移動先のフォルダが「C:\test\123」フォルダの場合、MoveFileの第二引数には右端に\を付けた”C:\test\123\”を指定しなければなりません。
\があるとフォルダ、なければファイルとみなします。
そのため、「C:\test\123.txt\」と書いた場合は見た目はファイル名に見えますが、「123.txt」というフォルダ、とみなします。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
MoveFileメソッドを使ってファイル名を変更するサンプルです。a.txtをaa.txtに変更しています。
移動先を別のフォルダにすればファイルの移動になります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
Sub FileSystemObjectMoveFile() '// エラー発生時も処理を継続 On Error Resume Next Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim sSource As String '// 移動元ファイルパス Dim sDest As String '// 移動先パス sSource = "V:\test\a.txt" sDest = "V:\test\aa.txt" '// ファイルを移動 Call fso.MoveFile(sSource, sDest) '// エラー発生時 If Err.Number <> 0 Then '// エラー内容を出力 Debug.Print Err.Number & " " & Err.Description Exit Sub End If End Sub |
移動元がない場合や移動先のファイルが既に存在する場合はエラーが発生するため、エラー処理「On Error Resume Next」でエラーが発生しても処理を継続するようにしています。
エラーが発生した場合はその内容をイミディエイトウィンドウに出力します。
FileSystemObjectクラスのオブジェクト変数に対して、「Set fso = Nothing」のようなコードがありませんが、なくても問題ありません。詳細については「VBAでのFileSystemObjectとTextStreamの使い方」をご参照ください。