GetFile について

ファイル一覧を作成した時は、GetFolderメソッドで、FilesプロパティをFor Each…Nextステートメントで回して、Fileオブジェクトを取得しました

主なメソッドやプロパティはそこで記載したので、もうお判りでしょう!?w

そのFileオブジェクトを取得するメソッドについてです!

■GetFileメソッド

広告

パラメータで指定したファイルのFileオブジェクトを取得します

・構文

構文は以下の通りです

object.GetFile(filespec)

objectはFileSystemObjectのオブジェクトです

・パラメータ

メソッドのパラメータは以下の通りです

  • filespec … オブジェクトを取得したいファイルのパス

ファイルへのパス(絶対パスもしくは相対パス)を指定します

存在しないファイルを指定した場合は、エラーが発生します

・戻り値

メソッドの戻り値は以下の通りです

  • Fileオブジェクト

指定したファイルのFileオブジェクトが戻り値として取得できますので、変数にSetしてください

■例

・簡単なサンプル?

①GetFileのサンプル

Function GetFile_Sample1(filespec As String) As File
    Dim obj     As FileSystemObject
    Dim oFile   As File
	
    ' オブジェクトを作成
    Set obj = New FileSystemObject
	
    ' Fileオブジェクトを取得
    Set oFile = obj.GetFile(filespec)
	
    ' オブジェクトを破棄
    Set obj = Nothing
	
    ' 結果を返す
    Set GetFile_Sample1 = oFile
	
    ' オブジェクトを破棄
    Set oFile = Nothing
	
End Function

②呼び出し元関数のサンプル

Sub CallGetFile_Sample1()
    Dim filespec    As String
    Dim oFile       As File
	
    ' オブジェクトを取得したいファイルパス
    filespec = "E:\VBA\Sample001\Sample.txt"
	
    ' 作成した関数を呼び出す
    Set oFile = GetFile_Sample1(filespec)
	
	' ファイル名を出力
    Debug.Print oFile.Name
	
	' Fileオブジェクトを破棄
    Set oFile = Nothing
	
End Sub

③簡略化したGetFileのサンプル

Function GetFile_Sample2(filespec As String) As File
    ' オブジェクトを作成
    With New FileSystemObject
        ' Fileオブジェクトを返す
        Set GetFile_Sample2 = .GetFile(filespec)
		
    End With
	
End Function
広告

・説明

FileSystemObjectを使おうが、別の何かを使おうが、とにかく関数化しておくことをお勧めします!

戻り値がオブジェクトなので、FileSystemObjectとFileの両方のオブジェクトを変数で作成しようとすると、①のように大変回りくどいことになってしまいますw

そのため、シンプルに③のようにするのが良いかと思います

・より良いサンプル

それでも気持ち悪いから嫌だ!という方は、こちらの「より良いサンプル」をどうぞ!w
④GetFileのより良いサンプル

Sub GetFile_Sample3(ByVal filespec As String, ByRef oFile As File)
    Dim obj     As FileSystemObject
	
    ' オブジェクトを作成
    Set obj = New FileSystemObject
	
    ' Fileオブジェクトを取得
    Set oFile = obj.GetFile(filespec)
	
    ' オブジェクトを破棄
    Set obj = Nothing
	
End Sub

⑤呼び出し元関数のサンプル2

Sub CallGetFile_Sample2()
    Dim filespec    As String
    Dim oFile       As File
	
    ' オブジェクトを取得したいファイルパス
    filespec = "E:\VBA\Sample001\Sample.txt"
	
    ' 作成した関数を呼び出す
    Call GetFile_Sample3(filespec, oFile)
	
	' ファイル名を出力
    Debug.Print oFile.Name
	
    ' Fileオブジェクトを破棄
    Set oFile = Nothing
	
End Sub

⑥簡略化したGetFileのより良いサンプル

Sub GetFile_Sample4(ByVal filespec As String, ByRef oFile As File)
    ' オブジェクトを作成
    With New FileSystemObject
        ' Fileオブジェクトを返す
        Set oFile = .GetFile(filespec)
		
    End With
	
End Sub

・更により良くする

更により良い関数化を行う場合はエラートラップを行って、その結果(エラーが起きたかどうか)を「GetFile_Sample」の戻り値で返す!
そうすると、呼び出し側は引数で受け取ったオブジェクトが正しいかどうかを関数の戻り値で判断できるので、「oFile」を参照して判断する必要がなくなりますね!

「If Not (oFile Is Nothing) Then … End If」で処理してもいいですが、「否定の否定」的な感じになるので「If (戻り値 = True) Then … End If」が良いです
「If (oFile Is Nothing) Then … Else … End If」でもありですけどね!
※この「Is Nothing」は「If ((oFile Is Nothing) = True) Then」のように見えるので、便利ですけどあまり好きじゃないですw

えーーーっと、もうサンプルは書きませんよw

・注意点

  • 指定するファイルパスは存在しないとエラーになる
  • FileExistsメソッドでファイルの存在確認をしておく
  • GetFileメソッドのエラー有無でファイルの存在確認としない
  • オブジェクトを返すメソッドを関数化するときは、引数で受け渡す
  • 関数内変数にSetしたオブジェクトは、関数内でNothingする
  • 引数で受け取って関数内でSetしたオブジェクトは、呼び出し側でNothingする
  • 関数内で起きたエラーは、呼び出し側に通知すべき

・その他

Excel VBAでも関数の引数には、ByVal(値渡し)とByRef(参照渡し)があります
趣味の世界かも知れませんが、本来は全ての関数の全ての引数で、正しく宣言するべきです!
※でもーーー、面倒なのでこのブログのサンプルでは使わないと思いますw

この宣言は、ソースコードを書いた人以外の人が見た時に、ByValならば値は変更されない、ByRefならば値を受け取るのだと、関数の中身を見なくてもわかるためなので、プログラマーを目指すなら書くべき!
ま、ただの人なら書かなくてもいいですけどねーw

次はどのメソッドを調べましょうかね?

ではでは

広告

やもす ʕ•͡-•ʔ

のんびり!のほほん!がモットーです!w 蕎麦食いたい ライブ行きたい 暑いの嫌い

シェアする