Excel VBA の実行時エラー辞典

実行時エラー '58':既に同名のファイルが存在しています

名前変更先の重複を調べ、既存ファイルを残したまま扱いを決めます。

よくある原因

直し方

  1. 変更前と変更後のフルパスを確認します。
  2. 変更先が存在する場合は処理を止め、既存ファイルの内容を確認します。
  3. 残す必要があるなら連番などで別名にし、重複を再確認してから名前を変更します。

元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。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

調べ方

  1. エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
  2. 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
  3. ループで生成しているファイル名を表示し、日付や連番が更新されているか確認します。
  4. Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? targetPath

Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。

関連エラー

確認した公式資料