프로젝트 및 실습/VBA

[VBA] TreeView(1): File Structure 출력

jooona 2022. 9. 19. 19:01
반응형

TreeView를 이용해 File Structure를 출력하기 위해선 먼저 두 가지 작업을 해주어야 합니다.

 

1. Userform 도구 상자에 TreeView 추가하기

 

 

1. 도구 상자에서 우클릭 후 [추가 컨트롤]을 클릭.

2. "Microsoft TreeView Control,  version 6.0"에 체크 후 [확인]

 

실행하면 도구 상자에서 TreeView를 사용할 수 있습니다.

 

2. Microsoft Scripting Runtime 참조하기

 

 

1. VBA 창 상단의 [도구] 탭에서 [참조]를 클릭.

2. "Microsoft Scripting Runtime"에 체크 후 [확인]

 

여기에 체크를 해주어야 File System과 관련된 라이브러리를 사용할 수 있습니다.

 

 


 

이제 본격적으로 프로그램을 만들어 보겠습니다.

저는  Button을 누르면 File Structure를 TreeView에 띄워주는 프로그램을 만들겠습니다.

 

Userform을 만들고 다음과 같이 TreeView와 Button을 하나 씩 만들어줍니다.  

 

 

저는 TreeView의 이름은 "PathTrv", Button의 이름은 "RunBtn"으로 설정했습니다.

 

그리고 아래와 같이 코드를 작성해줍니다.

 


Private Sub make_tree()

    Dim root_path As String
    root_path = "D:\Build"    'Write Path that You Want to Set to Root
    
    PathTrv.Nodes.Clear
    PathTrv.Nodes.Add , , "NODE", root_path

    Call recursive_make_tree(root_path, "NODE")
   
End Sub


Private Sub recursive_make_tree(parent_path As String, parent_Key As String)
    
    Dim FSO, now_folder, next_folder, next_file As Variant
    Dim count As Long
    Dim child_Key As String
    
    Set FSO = CreateObject("Scripting.FileSystemObject")
    
    If FSO.FolderExists(parent_path) Then
        
        count = 0
        
        Set now_folder = FSO.GetFolder(parent_path)
        
        For Each next_folder In now_folder.SubFolders
        
            child_Key = parent_Key & "_" & CStr(count)
            PathTrv.Nodes.Add parent_Key, tvwChild, child_Key, next_folder.name
        
            Call recursive_make_tree(next_folder.path, child_Key)
            
            count = count + 1
        
        Next
        
        For Each next_file In now_folder.Files
        
            child_Key = parent_Key & "_" & CStr(count)
            PathTrv.Nodes.Add parent_Key, tvwChild, child_Key, next_file.name
        
            count = count + 1
        
        Next
        
    End If
    
End Sub


Private Sub RunBtn_Click()

    make_tree
    
End Sub

 

* 코드 설명

 

make_tree 함수

 

1. Tree의 가장 상단에 위치할 주소를 지정해줍니다. 제 코드에서는 root_path에 원하는 경로를 작성해주면 됩니다.

2. TreeView에 Root Node를 'NODE'라는 아이디로 추가해줍니다.

3. recursive_make_tree 함수를 호출합니다.

 

* 재귀 호출을 통해 TreeView를 채우기 때문에 root_path로 너무 많은 구성요소를 가지는 폴더(예를 들어, "C:\")를 지정하면 메모리 초과 등의 이유로 프로그램이 제대로 동작하지 않을 수 있습니다. 

 

 

recursive_make_tree 함수

 

1. 파라미터로 자신을 호출한 부모 노드의 경로와 TreeView에서 사용하는 이름을 받아옵니다.

2. 부모 노드의 서브 폴더와 파일들을 탐색하며 TreeView에 추가해줍니다.

3. 서브 폴더가 존재하는 경우, 서브 폴더의 정보를 담아서 recursive_make_tree 함수를 재귀 호출해줍니다.  

 

* TreeView의 경우 각 노드의 고유 KEY를 통해 어떤 노드의 자식으로 추가될지를 지정할 수 있습니다. 저는 루트 노드의 KEY를 "NODE"라고 정했고, 그 자식 노드들은 재귀가 실행될 때마다 (Tree의 층수가 내려갈 때마다) '_'와 count 변수를 통해 번호를 덧붙여 주는 식으로 고유 KEY를 생성해주었습니다.

 

**  TreeView에서 노드를 추가할 때는 [Treeview이름].Nodes.Add 라는 구문을 사용합니다. 그 뒤에 따라오는 파라미터들은 순서대로 다음과 같습니다. [부모 노드의 KEY, 부모 노드와의 관계, 추가할 노드의 KEY, 추가할 노드의 이름]   

 

 

RunBtn_Click 함수

 

1. Button을 누르면 make_tree 함수를 호출합니다.

 

 


 

위의 코드를 실행하면 다음과 같이 결과를 얻을 수 있습니다.

 

 

 

다음 글에서는 TreeView에서 노드를 선택하여 실행 버튼을 누르면 해당 노드가 파일 또는 폴더인지를 식별한 뒤 실행시키는 프로그램으로 업그레이드를 해보도록 하겠습니다.

 

<다음 글: [VBA] TreeView(2): File Structure에서 Folder, File 실행]>

 

https://jooona.tistory.com/217

 

[VBA] TreeView(2): File Structure에서 Folder, File 실행

지난 글에서 TreeView에 File Structure를 띄우는 방법을 알아보았습니다. 이번 글에서는 TreeView에서 폴더 또는 파일을 클릭해서 선택된 노드를 실행하는 코드를 작성해 보겠습니다. <지난 글: [VBA] TreeV

jooona.tistory.com

 

반응형