FreeFile関数というものがある

FreeFile関数というものがある

FreeFile関数

前回の

akashi-keirin.hatenablog.com

をうpしたところ、即座に2件のツッコミが入った。

f:id:akashi_keirin:20180127094929j:plain

じゃなくって、

きなこ(id:kinacco)さん曰く

FreeFile関数がありますよ(^^)

また、ExcelVBAer (id:x1xy2xyz3)さん曰く

FreeFile で空いてるファイル番号が取れるはず。

と。

ははは。そうだったのか。

んで、チョー有名なOffice TANAKAさんのサイトで調べてみた。

FreeFile関数

構文

FreeFile(num)
引数numには、0または1を指定します。

解説

Openメソッドで指定する、使用可能なファイル番号を返します。
引数numに0を指定すると、FreeFileは1~255の範囲のファイル番号を返します。
引数numに1を指定すると、FreeFileは256~511の範囲のファイル番号を返します。
引数numを省略すると、0が指定されたものとみなします。
Openメソッドで、既に使用されているファイル番号を指定すると、実行時エラーが発生します。FreeFile関数を使うことで、ファイル番号の重複を避けることができます。

おおお! 便利だなあ!

コードの修正

というわけで、前回のリスト1を改良する。

リスト1 標準モジュール
Public Function getTextFromFile( _
                  ByVal fileFullName As String, _
                  ByVal linesCount As Integer) As String()
  If Dir(fileFullName) = "" Then Exit Function
  Dim n As Integer
  n = FreeFile(0)    '……(1)'
  Open fileFullName For Input As n
  Dim tmpArray() As String
  ReDim tmpArray(linesCount)
  Dim i As Integer
  For i = 0 To linesCount - 1
    If EOF(n) Then Exit For
    Line Input #n, tmpArray(i)
  Next
  getTextFromFile = tmpArray
  Close n
End Function

はい、変えたのは(1)の

n = FreeFile(0)

だけです。

前回、

On Error Resume Next
  Dim n As Integer
  n = 0
  Do
    Err.Clear
    n = n + 1
    Open fileFullName For Input As #n
  Loop Until Err.Number = 0
On Error GoTo 0

のこの強引さ(無理矢理エラーを起こさせる)に比べて、何とスッキリしたことか!

おわりに

きなこ(id:kinacco)さん、ExcelVBAer (id:x1xy2xyz3)さん、

あざす!!!!!!!!

@akashi_keirin on Twitter