이 페이지에서
구문
= ListFolders ( 폴더경로, [경로포함여부] )
인수구분
형식 설명
폴더경로
필수
String
하위 폴더 목록을 반환할 대상 폴더경로입니다.
경로포함여부
선택
Boolean
TRUE일 경우 상위폴더 경로를 포함하여 반환합니다. 기본값은 FALSE 입니다.
TRUE 이면 'C:\오빠두엑셀', FALSE 이면 '오빠두엑셀' 처럼 반환합니다.
마스터 코드
복사한 코드는 VBA 편집기(Alt + F11) 새 모듈에 붙여넣어 사용하세요'###############################################################
'오빠두엑셀 VBA 사용자지정함수 (https://www.oppadu.com)
'▶ ListFolders 함수
'▶ 선택한 폴더의 하위폴더 목록을 배열로 반환합니다.
'▶ 인수 설명
'_____________sPath : 하위 폴더목록을 출력할 폴더 경로입니다.
'_____________withPath : 상위폴더 경로를 같이 출력할 여부를 결정합니다.
'###############################################################
Function ListFolders(sPath As String, Optional withPath As Boolean = False)
'// 각 변수를 생성합니다.
Dim arr As Variant
Dim i As Integer
Dim oFSO As Object: Dim oFolder As Object: Dim oFlds As Object: Dim oF As Object
Set oFSO = CreateObject("Scripting.FileSystemObject")
Set oFolder = oFSO.GetFolder(sPath)
Set oFlds = oFolder.SubFolders
'// 변수를 설정합니다.
i = 1
If oFlds.Count = 0 Then Exit Function
If Right(sPath, 1) <> "\" Then sPath = sPath & "\"
'// 폴더에 하위폴더가 하나라도 존재시 배열 생성합니다.
ReDim arr(1 To oFlds.Count)
'// 각 파일을 돌아가며 Arr 배열로 반환합니다.
For Each oFld In oFlds
If withPath = False Then arr(i) = oFld.Name Else: arr(i) = sPath & oFld.Name
i = i + 1
Next
'// 배열을 결과값으로 출력합니다.
ListFolders = arr
End Function
활용 예제
C:\ 의 하위 폴더 목록을 배열로 반환하기
Sub Test1()
Dim Arr as Array
Arr = ListFolders("C:\")
'// C:\ 상위폴더 경로를 포함하지 않은 하위폴더 목록을 배열로 반환합니다. (예: Program Files, ...등)
End Sub
C:\ 의 하위 폴더 목록을 메세지 박스로 출력하기
Sub Test2()
Dim vPath As Variant
Dim vPaths As Variant
Dim sResult As String
vPaths = ListFolders(Sheet1.Range("B3").Value, True)
For Each vPath In vPaths
sResult = sResult & vPath & vbNewLine
Next
MsgBox sResult
End Sub
안내사항
ListFolders 함수는 숨겨진 하위 폴더도 함께 반환하며, 하위 폴더가 하나도 없을 경우 값을 반환하지 않고 종료됩니다.
문의 사항이 있습니다.
폴더가 비어있을 경우 하기 라인에서 런타임 에러가 발생합니다.
폴더가 비어있을 경우 에러 예외 처리를 할 수 있나요?
으로 경로의 존재 여부를 확인하는 조건문을 한번 추가해보시면 될 것 같습니다.
감사합니다 :)
저의 불필요한 댓글은 삭재부탁 드립니다.
문제를 잘 해결하셨다니 정말 다행입니다.
아울러 해결방법도 같이 공유해주셔서 정말 감사드리며, 다른 댓글은 삭제해드렸습니다.
앞으로도 실무에 도움이 되는 유익한 내용을 전달해드릴 수 있도록 노력하겠습니다.
감사합니다.