728x90

작업을 하다보면 선택한 폴더의 파일만 전부 엑셀 시트에 뿌리고, 엑셀 시트에서 원하는 결과를 도출하는 작업을 해야 하는 경우가 생긴다.

VBA 를 조금씩 배워가면서 셀 표기를 직관적으로 이해할 수 있게 하는게 여러모로 편하고 나중에 확인하기도 쉽다는 걸 배운다.

Cells(r, "J") 에서 r 변수는 row(행)의 약자로 사용하는게 더 좋다는 판단이 들었다. 처음에는 iRow 라는 변수를 쓰기도 했다.

sub Folder 의 자료는 가져오지 않는다. 가져오면 작업하는데 방해가 되어서 선택한 폴더의 자료만 가져오게 했다.


Sub CurrentPath_FindFile()      '// 현재 폴더의 파일 가져오기
    Dim objFolder, objFso, objFile, objSubFolder
    Dim fPath As Variant    '// 경로(Path) 변수 선언
    Dim r As Long
    Dim openMsg As String

    On Error Resume Next     '// 에러가 발생해도 계속 수행하라
    openMsg = "파일을 가져올 경로를 직접 지정하려면 Yes를 눌러주세요 "
    If MsgBox(openMsg, vbYesNo) = vbYes Then
        With Application.FileDialog(msoFileDialogFolderPicker)
            .InitialFileName = "C:\Excel Basics"
            .Show
            fPath = .SelectedItems(1)   '// 선택될 폴더를 경로 변수에 저장
        End With
    Else
        fPath = Cells(3, "A") & "\"     '// 셀이 비어있으면 C:\ 폴더에 있는 파일 리스트를 가져옴
'        Exit Sub
    End If
    If Err.Number <> 0 Or fPath = False Then Exit Sub
    On Error GoTo 0

    Set objFso = CreateObject("Scripting.FileSystemObject")     '// 파일 시스템 객체 생성
    Set objFolder = objFso.GetFolder(fPath)       '// 현재 폴더를 구함..
   
    Range([J1], Cells(Rows.Count, "j").End(3)).Offset(1).Resize(, 2).Clear    '// 데이터를 뿌릴 영역 초기화
   
    r = 1
    For Each objFile In objFolder.Files     '// 현재 폴더 내의 전체 파일 셀에 저장
        r = r + 1
'        Cells(r, "I") = fPath
        Cells(r, "J") = objFile.Name
    Next
   
End Sub

블로그 이미지

Link2Me

,