Excel VBA の実行時エラー辞典
実行時エラー '55':ファイルは既に開かれています
同じファイルの二重オープンや、開いたままの名前変更を確認します。
よくある原因
- Input で開いたファイルを、閉じずに Output で開き直しています。
- 途中終了した前の処理でファイルを閉じていません。
- 開いているファイルを Name や SetAttr で変更しています。
直し方
- 同じパスを開く Open が複数ないか検索します。
- 処理が所有するファイル番号を記録し、操作を切り替える前に閉じます。
- 終了時とエラー時の両方で後片付けするようにします。引数なしの Close で他の処理のファイルまで閉じないようにします。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
練習用の old.txt があり、new.txt が存在しない場合の名前変更です。元ファイルの名前が変わります。
修正前
Dim fileNo As Integer
fileNo = FreeFile
Open "C:\VbaPractice\old.txt" For Input As #fileNo
Name "C:\VbaPractice\old.txt" As "C:\VbaPractice\new.txt"
修正後
Dim fileNo As Integer
fileNo = FreeFile
Open "C:\VbaPractice\old.txt" For Input As #fileNo
' 読み取りが終わってから閉じます
Close #fileNo
Name "C:\VbaPractice\old.txt" As "C:\VbaPractice\new.txt"
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- Open から停止行まで F8 で進め、Close が通ったか確認します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? fileNo
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。