엑셀/vba

열린 모든 통합문서 이름 리스트 박스에 추가하기

do121 2023. 6. 14. 06:54

열려있는 모든 통합문서 이름을 리스트박스에 추가하고 리스트박스에 클릭하면 이름을 리턴하는 코드

1. 먼저 유저폼을 하나 추가

2. 리스트박스 추가

3. 모듈에 아래 코드를 붙여넣기

4. GetSelectedFileName는 리스트박스의 클릭 이벤트에 붙여넣기

 

실행하면 아래와 같이 표시됨

 

 

* 유저폼과 리스트박스 이름은 바꾸지 않고 그냥 둔다.

 

아래 코드에서 콜렉션에 넣지 않고 바로 리스트박스에 넣을 수 있지만 콜렉션 사용에 익숙해지기 위해 줄이지 않음

    For Each wb In Workbooks
        fileList.Add wb.Name
    Next wb
    
    ' ListBox1에 파일 리스트 출력
    For i = 1 To fileList.Count
        UserForm1.ListBox1.AddItem fileList.Item(i)
    Next i
    

Option Explicit

' 파일 선택 시 실행할 함수
Function GetSelectedFileName() As String
    Dim fileName As String
    fileName = UserForm1.ListBox1.Value
    GetSelectedFileName = fileName
End Function

' 통합문서 열릴 때 실행할 서브루틴
Private Sub Workbook_Open()
    Dim frm As Object ' 동적 폼
    Dim lstBox As Object ' ListBox 컨트롤
    Dim wb As Workbook
    Dim fileList As New Collection
    Dim i As Integer

    Set frm = UserForm1 
    With frm
        .Caption = "폼"
        .Width = 300
        .Height = 200
    End With
    
    ' ListBox 컨트롤 

    With UserForm1.ListBox1
        .Left = 10
        .Top = 10
        .Width = 280
        .Height = 150
    End With

    ' 열려있는 모든 통합문서의 이름을 컬렉션에 추가
    For Each wb In Workbooks
        fileList.Add wb.Name
    Next wb
    
    ' ListBox1에 파일 리스트 출력
    For i = 1 To fileList.Count
        UserForm1.ListBox1.AddItem fileList.Item(i)
    Next i
    
    '  폼 보여주기
    frm.Show
End Sub