rand(life)

[vba] 특정 폴더의 하위 폴더 이름 가져오기 본문

컴퓨터/엑셀

[vba] 특정 폴더의 하위 폴더 이름 가져오기

flogsta 2017. 7. 19. 21:46

CreateObject("Scripting.FileSystemObject") 를 이용하는 방법이다. (파란색 글씨가 핵심 부분이다) 출처: https://stackoverflow.com/

Option Explicit
Public Arr() As String
Public Counter As Long

Sub macro()
Dim myArr
strPath = "d:\data\"
myArr = GetSubFolders(strPath)

Counter = 0
End Sub

Function GetSubFolders(RootPath As String)
Dim fso As Object
Dim fld As Object
Dim sf As Object
Dim myArr

Set fso = CreateObject("Scripting.FileSystemObject")
Set fld = fso.GetFolder(RootPath)
For Each sf In fld.SUBFOLDERS
    ReDim Preserve Arr(Counter)
    Arr(Counter) = sf.Path
    Counter = Counter + 1

'myArr = GetSubFolders(sf.Path) '이 부분을 넣으면 하위폴더의 하위폴더까지 검색이 된다

Next
GetSubFolders = Arr
Set sf = Nothing
Set fld = Nothing
Set fso = Nothing
End Function


위의 구문을 이용한 예제를 첨부한다. 사실, 이것도 지식인 답변을 하려다 찾은 것이다.

하위폴더검색.zip


처음에는 잘 되는데, 두 번째 세 번째 반복 실행하면 실제보다 폴더 개수가 더 많이 나오는 현상이 있었다 

분석해보니 Counter 변수가 Public이라, 파일을 닫기 전에는 그 이전의 값을 계속 유지하는 것이었다. 

코드 맨 마지막에 

Counter = 0 
초기화를 시켜주니 잘 된다.