Excel VBA の実行時エラー辞典
実行時エラー '58':既に同名のファイルが存在しています
名前変更先の重複を調べ、既存ファイルを残したまま扱いを決めます。
よくある原因
- Name で変更しようとした名前が既に使われています。
- 日付だけの名前を付けて、同じ日に二回処理しています。
- 前回の出力や別担当者の出力と、移動先の名前が重なっています。
直し方
- 変更前と変更後のフルパスを確認します。
- 変更先が存在する場合は処理を止め、既存ファイルの内容を確認します。
- 残す必要があるなら連番などで別名にし、重複を再確認してから名前を変更します。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
draft.txt が存在する練習用フォルダの例です。存在確認と変更の間に別の処理が同名ファイルを作る場合もあるため、共有先ではエラー処理も必要です。
修正前
Name "C:\VbaPractice\draft.txt" As "C:\VbaPractice\final.txt"
修正後
Dim targetPath As String
targetPath = "C:\VbaPractice\final.txt"
If Len(Dir(targetPath)) > 0 Then
MsgBox "同名のファイルがあります。別名を指定してください"
Else
Name "C:\VbaPractice\draft.txt" As targetPath
End If
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- ループで生成しているファイル名を表示し、日付や連番が更新されているか確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? targetPath
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。