작업을 하다보면 선택한 폴더의 파일만 전부 엑셀 시트에 뿌리고, 엑셀 시트에서 원하는 결과를 도출하는 작업을 해야 하는 경우가 생긴다.
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
'업무 능력 향상 > 엑셀 VBA 활용' 카테고리의 다른 글
[VBA] 파일 복사 (VBA FileCopy) (0) | 2015.06.19 |
---|---|
[VBA] 문자와 숫자를 분리하여 추출하는 배열 (0) | 2015.06.18 |
[VBA] 중복되는 자료만 찾아서 배경색 저장 (0) | 2015.06.17 |
[VBA] 같은 자료를 콤마로 나열하기 (0) | 2015.06.16 |
[VBA]한셀내에 콤마가 있는 데이터 분리 (0) | 2015.06.12 |