TextStreamクラスのCloseメソッド
TextStreamクラスのCloseメソッドは、FileSystemObjectクラスのCreateTextFileメソッドやOpenTextFileメソッドで開いたファイルを閉じます。
Closeメソッドを呼び出していない場合は、CreateTextFileメソッドやOpenTextFileメソッドが書いてある関数を抜けると自動的にVBA側でファイルが閉じられます。
TextStreamクラスの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Sub Close()
引数なしです。戻り値もありません。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
一般的なテキストファイルを参照する処理をサンプルで書いています。
テキストファイルを開いて、1行ずつ読み取り、ファイルを閉じるコードです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
Sub TextStreamClose() On Error GoTo ERR_LABEL Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim ts As TextStream '// TextStreamクラス Dim sFilePath '// ファイルパス Dim sLine '// ファイル行 '// ファイルパスを設定 sFilePath = "C:\aaa.txt" '// ファイルを開く Set ts = fso.OpenTextFile(Filename:=sFilePath, IOMode:=ForReading, Create:=False, Format:=TristateFalse) Dim i i = 1 '// ファイルを全行ループ Do While ts.AtEndOfStream <> True '// ファイルから1行取得 sLine = ts.ReadLine Debug.Print CStr(i) & " : " & sLine i = i + 1 Loop '// ファイルを閉じる ts.Close ERR_LABEL: '// エラー発生時 If Err.Number <> 0 Then '// エラー内容を出力 Debug.Print Err.Number & " " & Err.Description End If End Sub |
Closeメソッドを書かなくてもCloseされるけど
デバッグをしていると気が付きますが、OpenTextFileメソッドなどでファイルを開いたあとにCloseせずに途中でデバッグを終了させたりすることがありますが、その際にCloseメソッドを実行していなくても、ちゃんとファイルは閉じられており、次のオープン処理は正しく行われます。
これは関数処理を抜けたら開いていたファイルをVBAで閉じてくれているおかげです。
なので、Closeメソッドがなくても次の実行時には問題がないことがほとんどです。
「ファイルを開いて読み込んで終わり」、程度の簡単なプログラムであればCloseメソッドは無くても問題ないことがほとんどでしょう。Closeメソッドが必要になるのは同じプログラムの中でオープンとクローズを何度も行うような場合ぐらいです。
しかし、だからといってCloseメソッドはいらないのかというと、そうではなく、やはり開いたものはちゃんと閉じなさい、というのがプログラミングの作法です。