Excel VBA の実行時エラー辞典
実行時エラー '52':ファイル名または番号が正しくありません
Open と読み書きで同じファイル番号を使い、ファイル名の組み立ても確認します。
よくある原因
- Open していないファイル番号で Print # や Input # を使っています。
- Close した後のファイル番号を再利用しています。
- 日付や時刻をそのまま付け、ファイル名に使用できない文字が入っています。
直し方
- 停止行のファイル番号と、それを開いた Open を対応させます。
- FreeFile で空いている番号を取得し、Open・読み書き・Close で同じ変数を使います。
- ファイル名は実際の文字列を表示し、日付なら yyyy-mm-dd など区切りを選びます。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
Windows で C:\VbaPractice を先に用意し、追記してよい練習用ファイルを使う例です。業務用ではエラー時にも自分が開いたファイルを閉じる処理を加えます。
修正前
Print #1, "集計結果"
修正後
Dim fileNo As Integer, filePath As String
filePath = "C:\VbaPractice\result.txt"
fileNo = FreeFile
Open filePath For Append As #fileNo
Print #fileNo, "集計結果"
Close #fileNo
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- ファイル番号の値と、途中の Close が先に実行されていないかを調べます。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? fileNo, filePath
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。