Excel VBA の実行時エラー辞典
実行時エラー '57':デバイス I/O エラーです
保存先のディスクや接続先の入出力に問題がないか、ローカルの小さな処理で切り分けます。
よくある原因
- CSV の書き込み中に USB ドライブが切断されています。
- 共有先との接続が途切れ、読み書きが続けられません。
- 保存媒体や出力機器そのものが正常に動いていません。
直し方
- 失敗した保存先と操作を記録し、同じ場所へ小さな練習用ファイルを手動で保存できるか確認します。
- 別の正常なローカルフォルダで同じ処理を試し、コードと接続先を切り分けます。
- 保存に失敗した出力は完成扱いにせず、機器や接続の復旧後に内容を確認してやり直します。
元のブックや入力ファイルを残し、コピーで試してください。以下は一つの原因を扱う例です。Sub 全体を示していないコードは、練習用の Sub の中に記述します。
Windows で作成済みの練習用フォルダを使い、外付けドライブ E: とローカル C: を比較する例です。接続先の変更は切り分けであり、機器の故障を修復するコードではありません。
修正前
Dim fileNo As Integer
fileNo = FreeFile
Open "E:\VbaPractice\probe.txt" For Append As #fileNo
Print #fileNo, "接続確認"
Close #fileNo
修正後
Dim fileNo As Integer
fileNo = FreeFile
Open "C:\VbaPractice\probe.txt" For Append As #fileNo
Print #fileNo, "接続確認"
Close #fileNo
調べ方
- エラー画面の「デバッグ」が使える場合は押し、黄色で止まった行とメッセージ全文を記録します。Windows では Alt+F11 で VBE を開けます。
- 停止行の少し前を選び、F9 でブレークポイントを設定します。再実行して止めたら、F8 で一行ずつ進めます。
- Open・Print #・Close のどこで止まったかを記録します。
- Ctrl+G でイミディエイトウィンドウを開き、下の式を入力して Enter を押します。例の変数があるプロシージャ内で停止し、変数名は自分のコードに合わせてください。
? Err.Number, Err.Description, Err.Source
Err の情報はエラーが起きた直後に確認します。修正後は、正常な入力と問題が起きた入力の両方で結果を照合してください。