FileExists について
Excel VBAを使用した場合、ExcelファイルのOpenはWorkbooksオブジェクトで行うので、FileSystemObjectでよく使用するのは、ファイルの存在確認を行うFileExistsメソッドかも知れません!
■FileExistsメソッド
先にも書きましたが、ファイルの存在を確認するメソッドです
・構文
構文は以下の通りです
object.FileExists(filespec)
objectはFileSystemObjectのオブジェクトです
・パラメータ
メソッドのパラメータは以下の通りです
- filespec … 存在を確認するファイルパス
存在確認を行うファイルのフルパスを指定します(相対パス、もしくは絶対パスにて指定可能)
・戻り値
メソッドの戻り値は以下の通りです
- True … ファイルが存在する
- False … ファイルが存在しない
パラメータで指定したファイルが存在する場合はTrueを返し、存在しない場合はFalseを返します
■例
・簡単なサンプル
①FileExistsのサンプル
Function FileExists_Sample(filespec As String) As Boolean Dim obj As FileSystemObject Dim ret As Boolean ' オブジェクトを作成 Set obj = New FileSystemObject ' ファイルの存在確認 ret = obj.FileExists(filespec) ' オブジェクトを破棄 Set obj = Nothing ' 結果を返す FileExists_Sample = ret End Function
②呼び出し元関数のサンプル
Sub CallFileExists_Sample() Dim filespec As String ' 調べたいファイルパス filespec = "E:\VBA\Sample001\Sample.txt" ' 作成した関数を呼び出す If (FileExists_Sample(filespec) = True) Then ' 戻り値がTrueなら存在する Debug.Print "ファイルは存在します" Else ' 戻り値がTrue以外(False)なら存在しない Debug.Print "ファイルは存在しません" End If End Sub
③簡略化したFileExistsのサンプル
Function FileExists_Sample2(filespec As String) As Boolean ' オブジェクトを作成 With New FileSystemObject ' ファイルの存在確認結果を返す FileExists_Sample2 = .FileExists(filespec) End With End Function
・説明
FileSystemObject型の変数でオブジェクトを作成しないといけませんので、関数化して呼び出すのが便利かと思います
ガッツリ書くのであれば、①の方式で書いて、エラートラップや以下の引数チェックをやるのも良いかも知れません
- 空文字ではないか?
- ファイルパス形式か?
簡略化したい場合は、③のようにすればかなりスッキリします!(まぁ、素敵w)
②は呼び出し元ですが、①も③もどちらを呼んでも同じ結果になります!(そりゃそうですねw)
・注意点
特にないのですが、根本的なことなので個々のメソッドで書く必要はないのですが、以下に注意です
- FileSystemObjectのオブジェクトを作成する場合は、NewでSetしてください!
- 特に③を使用する場合、Newを書き忘れてもVBA的にはコーディングエラーではなく、実行時エラーになりますのでご注意ください
- エラートラップやパラメータチェックについては、お任せしますw
・その他
関数の呼び出し毎にFileSystemObjectのオブジェクトを作成したくない人は、標準モジュールではなくクラスモジュールでクラス化してください
- Class_InitializeイベントでNew FileSystemObject
- Class_TerminateイベントでNothing
よく使いそうなメソッドについては、個別にサンプルを作っていこうと思います!
ではでは