VBAを実行するとVBA エラー 54「ファイル モードが不正です。」を見る機会はありませんか?
コードをみても誤った箇所がわからず途方に暮れる場合もあるかと思います。
そんな中で悩むことは、
・VBA エラー 54「ファイル モードが不正です。」の対処はどうすればよい?
ではないでしょうか?
今回は、
についてまとめます!
もくじ
VBA エラー 54「ファイル モードが不正です。」はどんなエラー?
ファイルの内容を操作するために使用するステートメントのモードに対応していない処理を行う場合に発生するエラーです。
VBA エラー 54の原因①「Openステートメントのモードに対してできない操作をしている」
Openステートメントのモードに対してできない操作をしている場合にエラーが発生します。
具体的には以下2点がが該当します。
Openステートメントで読み込みモード(Input)で開いたファイルに対して書き込む操作をおこなう
以下サンプルコードです。
Sub エラーテスト1a()
Open "C:\Temp\正しいファイル名.txt" For Input As #1
Print #1, "追記"
End Sub
はい、エラー54がでましたね。
読み込み専用のファイルに書き込もうとしているので、
「モードをよく見ろ!」
と怒られているわけですね。
Openステートメントで書き込みモード(Output)で開いたファイルに対して読み込む操作をおこなう
以下サンプルコードです。
Sub エラーテスト1b()
Open "C:\Temp\正しいファイル名.txt" For Output As #1
Line Input #1, temp
End Sub
こちらも同じく発生しました。
ファイルをどのモードで開いたか、注意したいところですね。
VBA エラー 54の原因①「Openステートメントのモードに対してできない操作をしている」の対処方法は
Openステートメントのモードを把握し、そのモードに見合う処理をおこなうことです。
Openステートメントの構文は以下の通りです。
Openステートメントの構文
Open <ファイル名> For <モード> As #<ファイル番号>
ファイル名:ドライブ名、フォルダ名含めてファイルまでのパスを指定します。
モード:ファイル モードとなります。Append、Binary、Input、Output、Randomから指定します。省略するとRandomになります。
・Append:追加モード(既存データの後ろに追加)
・Binary:バイナリモード
・Input:シーケンシャル入力モード
・Output:シーケンシャル出力モード
・Random:ランダムアクセスモード
ファイル番号:1~511の範囲のファイル番号を指定します。
Openステートメントで開いたファイルに対して書き込む操作をおこなうには、Outputモードか、追記のAppendモードを指定します。
Sub エラーテスト1a()
Open "C:\Temp\正しいファイル名.txt" For Output As #1
Print #1, "追記"
Close #1
End Sub
Sub エラーテスト1a()
Open "C:\Temp\正しいファイル名.txt" For Append As #1
Print #1, "追記"
Close #1
End Sub
また、Outputモードか、追記のAppendモードで開いたファイルに対してInputの読み込み操作は行わないようにしましょう。
VBA エラー 54の原因②「Put ステートメントまたは Get ステートメントで指定以外のモードでファイルを参照している」
書き込みのPutステートメントまたは読み込みのGetステートメントで参照できるのは、Randomモードまたは Binaryモードで開かれたファイルだけですが、それ以外のモードで開かれたファイルを参照しようとするとエラーとなります。
以下サンプルコードです。
Putステートメントの場合
Sub エラーテスト1a()
Open "C:\Temp\正しいファイル名.txt" For Output As #1
Put #1, , "追記"
Close #1
End Sub
Getステートメントの場合
Sub エラーテスト1b()
Open "C:\Temp\正しいファイル名.txt" For Output As #1
Get #1, , temp
Close #1
End Sub
はい、でましたね。
VBA エラー 54の原因①「Put ステートメントまたは Get ステートメントでシーケンシャル ファイルが指定されている」の対処方法はPut と Get で参照で参照するファイルを再指定する
Putステートメントまたは Getステートメントで参照する場合は、Randomモードまたは Binaryモードでファイルを開くようにします。
以下サンプルコードです。
Putステートメントの場合
Sub エラーテスト1a()
Open "C:\Temp\正しいファイル名.txt" For Random As #1
Put #1, , "追記"
Close #1
End Sub
Getステートメントの場合
Sub エラーテスト1b()
Open "C:\Temp\正しいファイル名.txt" For Random As #1
Get #1, , temp
Close #1
End Sub
はい、エラーは解消されました。
さいごに
今回は、
についてまとめました。
VBAのエラーはパターンを知っておくと発生した時に慌てず対応することができますので、
しっかりと対処方法を把握するようにしておきたいですね!
コメントを残す