指定ディレクトリ内のフォルダ名を表示(その2)
FileSystemObjectを使用する
前回はDir関数を使用しました。
今回は前回と同様の処理をFileSystemObjectを使います。
FileSystemObjectは以下のように生成します。
Dim objFS As FileSystemObject
Set objFS = CreateObject("Scripting.FileSystemObject")
GetFolderメソッドからFolderオブジェクトを取得できます。
Dim Fols As Folders
Set Fols = objFS.GetFolder(dPath)
Folderオブジェクトからサブフォルダの数を取得できます。
Fols.SubFolders.Count
Folderオブジェクトからルートフォルダ名を取得できます。
Fols.Name
今回の場合はFileSystemObjectオブジェクトからサブフォルダのFolderオブジェクトを取得し、そこからサブフォルダ名を取得します。
Dim folName
For Each folder In objFS.GetFolder(dPath).SubFolders
folName = folder.Name
Next
<Excel VBA 指定ディレクトリ内のフォルダ名を表示(その2)>
Option Explicit Sub showFolderCnt1() 'A1セルの文字列を取得する Dim dPath As String dPath = Cells(1, "A").Value '空の場合は終了 If dPath = "" Then Exit Sub '末尾が「\」じゃなかったら付加する If Right(dPath, 1) <> "\" Then dPath = dPath & "\" End If 'FileSystemオブジェクトを取得する Dim objFS As FileSystemObject Set objFS = CreateObject("Scripting.FileSystemObject") 'サブフォルダーの数を取得する Dim Cnt As Long On Error GoTo Err Cnt = objFS.GetFolder(dPath).SubFolders.Count On Error GoTo 0 'オブジェクトを解放する Set objFS = Nothing 'B1セルに表示する Cells(1, "B").Value = Cnt Exit Sub Err: 'サブフォルダを取得できなかったら終了 Exit Sub End Sub Sub showFolderList1() 'A1セルの文字列を取得する Dim dPath As String dPath = Cells(1, "A").Value '空の場合は終了 If dPath = "" Then Exit Sub '末尾が「\」じゃなかったら付加する If Right(dPath, 1) <> "\" Then dPath = dPath & "\" End If 'FileSystemオブジェクトを取得する Dim objFS As FileSystemObject Set objFS = CreateObject("Scripting.FileSystemObject") 'サブフォルダー数分ループ Dim folder As folder Dim y As Long y = 2 On Error GoTo Err For Each folder In objFS.GetFolder(dPath).SubFolders 'フォルダ名y番目のセルに表示 Cells(y, "B").Value = folder.Name y = y + 1 Next On Error GoTo 0 'オブジェクトを解放する Set objFS = Nothing Cells(y, "B").Value = "/" '←終了 Exit Sub Err: 'サブフォルダを取得できなかったら終了 Exit Sub End Sub Sub showLine1() 'B1セルよりフォルダ数を取得 Dim folCnt As Integer folCnt = Cells(1, "B").Value If folCnt = 0 Then '何もしないで終了 Exit Sub ElseIf folCnt = 1 Then 'A2セル Cells(2, "A").Value = "└───" ElseIf folCnt = 2 Then 'A2セル Cells(2, "A").Value = "├───" 'A3セル Cells(3, "A").Value = "└───" ElseIf folCnt > 2 Then 'A2セル Cells(2, "A").Value = "├───" 'A2セル〜A?(最終セルの手前) Dim y As Integer For y = 3 To folCnt Cells(y, "A").Value = "├───" Next y '最終セルはフォルダ数+1 Cells(folCnt + 1, "A").Value = "└───" 'その他 Else '何もしないで終了 Exit Sub End If End Sub |