Excel (VBA)

Excel VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
FileSystemObjectについて
投稿日時: 18/09/12 10:56:56
投稿者: けん太

ファイル件数取得で、ネット検索していましたが、
以下のロジックで、ファイルクローズがありませんが、
クローズしなくても良いのでしょうか?
 
Function GetLineCount(a_sFilePath) As Long
    Dim oFS As New FileSystemObject
    Dim oTS As TextStream
    Dim iLine
     
    '// 引数のファイルが存在しない場合は処理を終了する
    If (oFS.FileExists(a_sFilePath) = False) Then
        GetLineCount = -1
        Exit Function
    End If
     
    '// 追加モードで開く
    Set oTS = oFS.OpenTextFile(a_sFilePath, ForAppending)
     
    GetLineCount = oTS.Line - 1
End Function

回答
投稿日時: 18/09/12 14:11:21
投稿者: Suzu

引用:
以下のロジックで、ファイルクローズがありませんが、
クローズしなくても良いのでしょうか?

 
ストリームに対し、何をしているか。
行数を「取得」しています。
 
何かを書き込んでいる訳でもありません。
書き込んでいるなら、少なくとも「保存」は必要でしょう。
 
 
作法としては、あった方が良いでしょう。
 
コード作成の効率化を考えると、
基本、計算が終われば変数は開放・破棄されます。
つまり、暗黙的にCloseされます。
自動で閉じられるのであれば、書く必要は無い。と言う考え方です。
 
ただし、スコープや使われ方により、明示的にCloseしないとダメな場合もあります。
そうなった時に、明示的にCloseを書く習慣があると、その部分で躓く事はなくなりますよね。
 
 
ご質問の中では
ファイル件数取得 となっていますが、
先にも述べましたが、取得しているのは『行数』ですよ。。大丈夫ですよね。

投稿日時: 18/09/12 14:30:01
投稿者: けん太

Suzuさん
 
  ご解説ありがとうございました。
   ForAppending で最終行に富んでいるので、
  「行」と言うことは理解しています。
 
  ご配慮、ありがとうございます。