FileSystemObjectのFolderExistsメソッド
FileSystemObjectのFolderExistsメソッドは、引数のフォルダパスが実際にディスク上に存在するかを判定します。存在すればTrueを返し、なければFalseを返します。
FolderExistsメソッドと同様にDir関数でもフォルダの存在チェックを行うことができます。詳細については「VBAでフォルダ存在チェック」をご参照ください。
FileSystemObjectの他のメソッドやプロパティは「FileSystemObjectとTextStreamのメソッド・プロパティ一覧」をご参照ください。
構文
Function FolderExists(FolderSpec As String) As Boolean
FolderSpec | 存在チェックを行うフォルダパスを指定します。絶対パスと相対パスのどちらも判定可能です。
ネットワークドライブやリムーバブルディスクのパス指定や、IPアドレス指定での”¥¥192.168.10.100¥aaa¥”のようなパスも指定可能です。 |
戻り値 | フォルダ存在チェック結果を返します。存在する場合はTrueを返し、存在しない場合はFalseを返します。 |
複数フォルダのチェックを行う場合
複数のフォルダの存在チェックを連続して行う場合、気をつけなければならないことが1つあります。
それはFileSystemObjectオブジェクトの生成は処理速度が遅いという欠点についてです。
FileSystemObjectオブジェクトはNewやCreateObject関数によって生成されますが、オブジェクトの生成には処理時間が結構かかります。
複数のフォルダの存在チェックを行うのであれば、FileSystemObjectオブジェクトはモジュール変数や引数で渡すようにして、呼び出し元で1度だけ生成すると、毎回生成するのと比べて処理速度は速くなります。
この点についてのコードの書き方は以下のサンプルコードや「VBAでフォルダ存在チェック」をご参照ください。
エラー対応
FolderExistsメソッドは引数に文字列を指定していればエラーが発生することはほとんどありません。発生するとすれば引数に文字列以外のオブジェクト型などを渡した場合ぐらいになります。
引数のデータ型不正の場合は「エラー:438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。」のエラーが発生します。
エラーが発生するとメッセージボックスが表示され、処理はそこで止まってしまいます。
処理を止めないようにするためにはエラー処理を適切に行う必要があります。
具体的には「On Error Goto XXX」でエラー発生時にエラーラベルまで処理を飛ばしたり、「On Error Resume Next」でエラーが発生しても処理を継続するようにしておいたほうがよいでしょう。
事前設定
以下のサンプルコードでは参照設定でFileSystemObjectクラスを利用できるようにしています。
FileSystemObjectクラスを利用するには、事前にVBA画面→ツールメニュー→参照設定、を選択し、参照設定ダイアログで「Microsoft Scripting Runtime」にチェックを付けます。
詳細は「VBAでのFileSystemObjectとTextStreamの使い方」の事前設定をご参照ください。
サンプルコード
呼び出し元と呼び出し先の2つのメソッドに分けたサンプルコードです。
呼び出し元でFileSystemObjectオブジェクトの生成を行い、呼び出し先でFolderExistsメソッドを実行しています。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 |
Sub FileSystemObjectFolderExistsCall() Dim fso As New FileSystemObject '// FileSystemObjectクラス Dim ar() As String '// パス配列 Dim s '// パス ReDim ar(5) ar(0) = "C:\Windows" ar(1) = "C:\Windows\" ar(2) = "C:\Windows..\..\Windows" ar(3) = "\\192.168.10.100\aaa" ar(4) = "S:\aaa\bbb" ar(5) = "aaa" For Each s In ar Call FileSystemObjectFolderExists(fso, CStr(s)) Next End Sub '// 引数で指定されたフォルダパスの存在チェックを行う '// 引数1:呼び出し元で生成済みのFileSystemObjectオブジェクト '// 引数2:フォルダパス '// 戻り値:FolderExistsメソッド結果を返却する Function FileSystemObjectFolderExists(fso As FileSystemObject, sPath As String) As Boolean On Error GoTo ERR_LABEL Dim bRet As Boolean '// 存在チェック結果 '// フォルダ存在チェック bRet = fso.FolderExists(sPath) Debug.Print sPath & " - " & bRet ERR_LABEL: '// エラー発生時 If Err.Number <> 0 Then '// エラー内容を出力 Debug.Print Err.Number & " " & Err.Description End If '// チェック結果を戻り値に設定 FileSystemObjectFolderExists = bRet End Function |
実行結果
C:\Windows – True
C:\Windows\ – True
C:\Windows..\..\Windows – True
\\192.168.10.100\aaa – True
S:\aaa\bbb – True
aaa – False
呼び出し元で配列に複数のフォルダパスを設定し、それを1つずつ呼び出し先の関数に渡しています。
呼び出し先の関数では引数で渡されたFileSystemObjectオブジェクトとフォルダパスを使ってFolderExistsメソッドを実行し、その結果を戻り値として返します。
フォルダパスの種類にはいくつか入れていますが、IPアドレスやネットワークドライブのパスも正しく判定されます。
詳細については「VBAでのFileSystemObjectとTextStreamの使い方」をご参照ください。