FileSystemObjectのOpenTextFileメソッド

FileSystemObjectのOpenFileTextメソッドは、指定されたファイル名のテキストファイルの参照します。ファイルデータの参照やファイルを閉じる処理はOpenTextFileメソッドの戻り値のTextStreamオブジェクトを利用します。

OpenTextFileメソッドは通常はファイル参照を行うために利用しますが、IOMode引数で追加書き込みや書き込み指定をすることでファイルの作成を行うことも可能です。ファイル作成を行う場合はCreateTextFileメソッドと同様の動きになります。

FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。

構文

Function OpenTextFile(FileName As String, [IOMode As IOMode = ForReading], [Create As Boolean = False], [Format As Tristate = TristateFalse]) As TextStream

FileName 参照または作成するファイルパスを指定します。ファイル名だけを指定した場合はカレントディレクトリに作成されます。

存在しないファイルパスが指定された場合は実行時エラー76「パスが見つかりません。」が発生します。

ファイルが存在していても他のアプリケーションが先に開いている場合は実行時エラー70「書き込みできません。」が発生します。

IOMode
(省略可)
ファイルの開き方をIOMode定数で指定します。省略時は参照モード(ForReading)になります。

IOMode定数 内容
ForAppending 8 追加書き込みモードでファイルを開きます。書き込むデータは既存データの最終行に追加されます。
ForReading 1 参照モードでファイルを開きます。
ForWriting 2 書き込みモードでファイルを開きます。既存データは削除されます。
Create
(省略可)
FileNameで指定したファイルが存在しない場合にファイルを作成するかどうかを指定します。

新規でファイルを作成する場合はTrueを指定し、作成しない場合はFalseを指定します。省略時はFalseになります。

Format
(省略可)
ファイルの文字コード形式をTristate定数で指定します。省略時はTristateFalseのASCIIファイル扱いになります。

Tristate定数 内容
TristateFalse 0 ASCIIファイルとして扱います。
TristateMixed -2 システムの既定値で扱います。
TristateTrue -1 Unicodeファイルとして扱います。
TristateUseDefault -2 システムの既定値で扱います。
戻り値 対象ファイルの操作を行うためのTextStreamクラスオブジェクトを返します。

通常は事前にTextStreamクラスオブジェクトの変数を用意しておき、その変数に対してSetステートメントで戻り値を受け取るようにコーディングします。

エラー対応

OpenTextFileメソッドでは、元のファイルがない場合や上書き禁止のファイルを扱う場合などの要因でエラーが発生することがあります。

これらのエラーが発生するとメッセージボックスが表示され、処理はそこで止まってしまいます。

処理を止めないようにするためにはエラー処理を適切に行う必要があります。

具体的には「On Error Goto XXX」でエラー発生時にエラーラベルまで処理を飛ばしたり、「On Error Resume Next」でエラーが発生しても処理を継続するようにしておいたほうがよいでしょう。

事前設定

以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。

FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。

詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。

サンプルコード

ファイルを参照モードで開いて閉じるサンプルです。

指定したファイルパスを開いて1行ずつ読み込むだけの処理です。

開こうとしているファイルが読み込み排他になっている場合などでエラーが発生する恐れがあるため、On Error Goto でエラー発生時はERR_LABELの位置のエラー処理へ遷移するようにしています。

FileSystemObjectやTextStreamのオブジェクト変数に対して、「Set fso = Nothing」のようなコードがありませんが、なくても問題ありません。詳細については「VBAでのFileSystemObjectとTextStreamの使い方」をご参照ください。