VBA 파일 경로를 넣고 폴더 안 파일명과 경로를 Variant 형으로 Return 하는 함수

2020. 5. 28. 17:14카테고리 없음

728x90
반응형


이 글을 작성하는 이유는

특정 경로안에 엑셀 파일들이나 사진파일, 텍스트파일 등 여러 개의 파일들이 있다면

파일명과 파일경로를 가져와 Link를 시켜준다거나 할 때 유용할 수 있습니다.

배열로 가져오기 때문에 속도 측면에서도 엄청나게 빠르게 작업을 할 수 있습니다.

해당 파일을 사용할 수 있는 경우

: 서버에 취합 해둔 파일들이 모아져있고, 이 파일들을 모두 하이퍼링크를 걸어야 할 때

: 단순 특정 경로 안의 파일명을 가져오고 싶을 때




특정 경로에 파일들이 들어있는 모습

 

코드를 실행하여 파일명과, 파일의 경로를 가져온 모습

 


<사용할 때>

Private Sub getFileInfo()

Dim strFilePath As String: strFilePath = "C:\WorkSpace\"
Dim vs() As Variant

vs = get_files(strFilePath)
vs = ss(vs)

End Sub


<파일 경로를 반복하는 함수>

Private Function get_files(ByRef path As String) As Variant()
'// 도구(T) -> 참조(R).. -> Microsoft Scripting Runtime 추가

Dim objFSO As Scripting.FileSystemObject
Dim objFolder As Folder
Dim objSubFolder As Folder
Dim objFile As File

'// Save FileName and FilePath
Dim v() As Variant

'Create an instance of the FileSystemObject
Set objFSO = CreateObject("Scripting.FileSystemObject")

'Get the folder object
Set objFolder = objFSO.GetFolder(path)

Dim r As Integer: r = 1
For Each objSubFolder In objFolder.SubFolders
    If (objSubFolder.Files.Count > 0) Then
        For Each objFile In objSubFolder.Files
            ReDim Preserve v(1 To 2, 1 To r)
            Dim fileName As String
            fileName = Split(objFile.Name, ".")(0)
            v(1, r) = fileName
            v(2, r) = objFile.path
            r = r + 1
        Next
    End If
Next

get_files = IIf(r = 1, Nothing, v)

End Function


엑셀 VBA로 할 수 있는 건 정말 다양한 듯 하다.

솔찍히 생각하면 못할 것도 없다고 생각한다.

왜냐하면, 사람들이 수동으로 작업을 해야 하는 일들을

"ex) 매 일 날짜를 바꿔서 한달 치의 프린트를 해야 할 때"

한 달치의 날짜를 일일이 바꾸는 것 보다 vba를 사용하여 버튼 한 번만 누르면

자동으로 날짜가 바뀌어 프린트 되는 것만 봐도 정말 편해진다.

정말 간단한 예 이지만 엑셀vba로 할 수 있는 건 수없이 다양하다고 생각한다.

cmd 명령어도 실행할 수 있으니 뭐 ..

 

728x90
반응형