Excel VBA の実行時エラー辞典
実行時エラー '62':ファイルにこれ以上データがありません
空ファイルや予定より短いファイルから、末尾を越えて読み込んでいないか確認します。
よくある原因
- 入力ファイルが空なのに最初の一行を読んでいます。
- 固定回数のループが、実際の行数を超えて読み込みます。
- ヘッダーを先に読んだ分だけ、残りの読み取り回数がずれています。
直し方
- 実際のファイルの行数と、ヘッダーの扱いを確認します。
- テキストを Input モードで読む場合は、読む直前に EOF で末尾かどうか判定します。
- 空ファイルと一行だけのファイルでも確認し、読み終えたら Close します。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
存在するテキストファイルを一行ずつ読む例です。Binary モードの読み取りは、ファイル長と読み取り位置に応じた別の確認が必要です。
修正前
Dim fileNo As Integer, lineText As String, i As Long
fileNo = FreeFile
Open "C:\VbaPractice\input.txt" For Input As #fileNo
For i = 1 To 100
Line Input #fileNo, lineText
Next i
Close #fileNo
修正後
Dim fileNo As Integer, lineText As String
fileNo = FreeFile
Open "C:\VbaPractice\input.txt" For Input As #fileNo
Do While Not EOF(fileNo)
Line Input #fileNo, lineText
Debug.Print lineText
Loop
Close #fileNo
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- ファイルを開いている間に EOF を確認します。Close 後の番号には使いません。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? EOF(fileNo), LOF(fileNo)
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。