更新日:、 作成日:

VBA エラー 52 ファイル名または番号が不正です。

はじめに

Excel VBA マクロのエラー 52 「ファイル名または番号が不正です。」の対処法を紹介します。

Open で開かれていないファイル番号を使用したときに発生します。

Windows の名前付け規則に従っていないファイル名を指定したときにも発生します。

エラーの基本的な対処法は、エラー箇所の特定とその原因となったコードをデバッグします。

デバッグについては「デバッグの仕方」をご覧ください。
エラー処理については「エラー処理をする」をご覧ください。

解決する

Open ステートメントで開いたファイルには、その番号でのみ操作できます。違う番号を指定すると発生します。

また Windows で不正なファイル名を指定して開こうとしたときにも発生します。

Open を使用しないで「FileSystemObject ファイル操作の基礎」を使用すると、高機能なファイル操作ができます。

番号を合わせる

「FreeFile 関数」を指定して適切な番号を取得できます。Open で開いたファイルと違う番号を指定するとエラーが発生します。

Dim no As Integer ' ファイル番号
no = FreeFile

Dim s As String

Open "D:\Tips.txt" For Input As #no
Do While Not EOF(1)
    s = Input(1, #2) ' 番号が違うのでエラーが発生
    Debug.Print(s)
Loop
Close #no

Close で閉じたファイルを操作するときにも発生します。Close にファイル番号を指定しないと、すべてのファイルが閉じられるのでそれが原因のときもあります。

Dim no As Integer ' ファイル番号
no = FreeFile

Dim s As String

Open "D:\Tips.txt" For Input As #no
Close ' すべてのファイルを閉じる
Do While Not EOF(1)
    s = Input(1, #2) ' エラー
    Debug.Print(s)
Loop

適切なファイル名にする

記号で始まるファイル名や不正な記号が含まれていると発生します。

Open "*" For Input As #1            ' エラー
Open "D:\Tips::txt" For Input As #1 ' エラー

Set ts = fso.OpenTextFile("D:\Tip::s.txt", ForReading) ' エラー、FileSystemObject

ファイル名やパスが不正なときは「エラー 53 ファイルが見つかりません。」や「エラー 76 パスが見つかりません。」が発生することもあります。

エクスプローラーで存在するファイルか確認すると原因がわかります。