FolderExists について

Excel VBAを使用した場合、ExcelファイルのOpenはWorkbooksオブジェクトで行うので、FileSystemObjectでファイル作成を行う場合、ファイルだけでなくフォルダの存在確認を行うFolderExistsメソッドも必要ですね!

■FolderExistsメソッド

広告

フォルダの存在を確認するメソッドです

・構文

構文は以下の通りです

object.FolderExists(folderspec)

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

・パラメータ

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

  • folderspec … 存在を確認するフォルダパス

存在確認を行うフォルダのフルパスを指定します(相対パス、もしくは絶対パスにて指定可能)

・戻り値

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

  • True … フォルダが存在する
  • False … フォルダが存在しない

パラメータで指定したフォルダが存在する場合はTrueを返し、存在しない場合はFalseを返します

■例

広告

・簡単なサンプル

‘ ①FolderExistsのサンプル

Function FolderExists_Sample(folderspec As String) As Boolean

    Dim obj     As FileSystemObject
    Dim ret     As Boolean
    
    ' オブジェクトを作成
    Set obj = New FileSystemObject
    
    ' フォルダの存在確認
    ret = obj.FolderExists(folderspec)
    
    ' オブジェクトを破棄
    Set obj = Nothing
    
    ' 結果を返す
    FolderExists_Sample = ret
    
End Function

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

Sub CallFolderExists_Sample()

    Dim folderspec      As String
    
    ' 調べたいフォルダパス
    folderspec = "E:\VBA\Sample.003\"
    
    ' 作成した関数を呼び出す
    If (FolderExists_Sample(folderspec) = True) Then
        ' 戻り値がTrueなら存在する
        Debug.Print "フォルダは存在します"
    
    Else
        ' 戻り値がTrue以外(False)なら存在しない
        Debug.Print "フォルダは存在しません"
    
    End If

End Sub

‘ ③簡略化したFolderExistsのサンプル

Function FolderExists_Sample2(folderspec As String) As Boolean

    ' オブジェクトを作成
    With New FileSystemObject
        ' フォルダの存在確認結果を返す
        FolderExists_Sample2 = .FolderExists(folderspec)
    
    End With
    
End Function

・説明

FileSystemObject型の変数でオブジェクトを作成しないといけませんので、関数化して呼び出すのが便利です

ステップをきっちりと書きたい人は、①の方式で書いた上で、エラートラップや以下の引数チェックをやるのが良いかも知れません

  • 空文字ではないか?
  • フォルダパス形式か?

簡略化したい場合は、③のようにすればよいでしょう

②は呼び出し元です

①でも③でもどちらを呼んでも同じ結果になります!

・注意点

根本的なことなので個々のメソッドで書く必要はない内容ではありますが、多くのメソッドでは書かないようにするので、このあたり頻繁に使いそうなメソッドで書いておこうと思います

  • FileSystemObjectのオブジェクトを作成する場合は、NewでSetしてください!
  • 特に③を使用する場合、Newを書き忘れてもVBA的にはコーディングエラーではなく、実行時エラーになりますのでご注意ください
  • エラートラップやパラメータチェックについては、コーディング方針(最下位のメソッドでチェックするか、上位でチェックするか等)に従ってください

・その他

関数の呼び出し毎にFileSystemObjectのオブジェクトを作成したくない人は、標準モジュールではなくクラスモジュールでクラス化してください

  • Class_InitializeイベントでNew FileSystemObject
  • Class_TerminateイベントでNothing

ではでは

広告

やもす ʕ•͡-•ʔ

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

シェアする