エラー内容
エラー62はテキストファイルなどの外部のファイルを読み込んでファイルの終端に到達したあとに、さらにファイルの内容を読み込もうとして発生するエラーです。
エラー原因
通常、ファイルの読み込み処理はファイルの先頭から実施します。
その読み込み処理で全てのデータの読み込みが行われるとEOFに達します。
ファイルの終端のことをEOFと言います。End Of Fileの略です。
EOFに達したかどうかはEOF関数で判定することができます。なお、バイナリモード(Binary)で開いた場合はEOF関数は利用できません。LOF関数とLoc関数で判定します。
EOFに達した場合、それ以降にはファイルデータはありません。
しかし、処理でさらに先のデータを取るようなコードを書いている場合にエラー62は発生します。
サンプルコード
通常ファイル
エラー62が発生する通常ファイルの場合のサンプルです。ファイルの文字コードはShift_JISです。14行目でエラーになります。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
Sub Err62Test() Dim sPath '// ファイルパス Dim sLine '// 読み込み行 sPath = "C:\web\testfile.txt" Open sPath For Input Access Read As #1 Do While Not EOF(1) Line Input #1, sLine Debug.Print sLine Loop Line Input #1, sLine Close #1 End Sub |
バイナリファイル
エラー62が発生するバイナリファイルのサンプルです。ここではファイルの文字コードをUTF8にしています。15行目でエラーになります。
バイナリファイルの場合はLOF関数(Length Of File)でファイルサイズを取得し、ループ内のLoc関数(Location)で現在のファイルの位置を取得しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
Sub Err62BinaryTest() Dim sPath '// ファイルパス Dim sChar '// 読み込み文字 Dim position sPath = "C:\web\textfile_utf8.txt" Open sPath For Binary Access Read As #1 Do While position < LOF(1) Input #1, sChar position = Loc(1) Loop Input #1, sChar Close #1 End Sub |
エラー対応方法
エラーの対応方法は、上記のサンプルのようにファイル読み込みはループ処理で行うようにします。
EOF関数やLOF関数で終端の判定を行い、それ以降では読み込みを行わないようなコードすることで対応できます。
上記のサンプルコードであれば、黄色の行の部分を削除することでエラーが発生しなくなります。