엑셀 VBA 파일선택창 매크로 사용법 총정리 :: 엑셀 자동화 기초

엑셀 VBA 자동화를 위한 필수 명령문인 파일선택창(FileDialog) 명령문의 마스터코드의 동작원리와 실전 사용법을 살펴봅니다.

홈페이지 » 엑셀 VBA 파일선택창 매크로 사용법 총정리 :: 엑셀 자동화 기초

강의소개

이번 강의에서는 엑셀 VBA 자동화 구축에 꼭 필요한 파일선택창 모듈에 대해 알아봅니다. 파일선택창을 활용하면 특정 확장자를 가진 파일만 사용자가 직접 선택할 수 있도록 유도할 수 있으며, 따라서 더욱 유연성있는 매크로 프로그램을 제작할 수 있습니다. 이번 강의에 소개해드린 마스터코드의 인수를 변경하면 파일선택창의 시작경로, 선택가능한 확장자, 선택가능한 파일의 개수 등을 조절할 수 있습니다.

함수구문
= Multiple_FileDialog ( Title, FilterName, FilterExt, InitialFolder, InitialView, MultiSelection, PathDelimiter, withPath, withExt )
패치노트
  • 2019.11.27 업데이트
    Multiple_FileDialog 마스터 코드에 파일구분자 선택 인수 PathDelimiter를 추가하였습니다.
  • 2020.02.16 업데이트
    withPath , withExt 인수를 추가하였습니다. 이제 파일경로 또는 확장자 포함여부를 선택하여 출력할 수 있습니다.
인수설명
  • Title : 엑셀 파일선택창에 보이는 제목입니다.
  • FilterName : 확장자 필터에 표시될 필터 이름입니다.
  • FilterExt : 파일선택창에 출력될 확장자를 필터링합니다.
  • InitialFolder : 파일선택창의 시작 경로입니다.
  • InitialView : 파일선택창이 실행되었을 때 어떻게 보여질지 출력방식을 결정합니다. 자세한 내용은 관련링크를 참고하세요.
    https://docs.microsoft.com/en-us/office/vba/api/office.msofiledialogview
  • MultiSelection : TRUE일 경우 여러개의 파일을 선택할 수 있습니다. (기본값: TRUE)
  • PathDelimiter : 여러개의 파일을 구분할 구분자입니다. 특별한 상황을 제외하고 기본값을 유지합니다. (기본값 : "|")
  • withPath : TRUE일 경우 파일경로를 함께 출력합니다. (기본값: TRUE)
  • withExt : TRUE일 경우 파일확장자를 함께 출력합니다. (기본값: TRUE)

예제파일 및 E-Book 교재 다운로드

1. 변수 설정하기

4개의 변수를 생성합니다.

  • FGD : FileDialog (파일선택창) 을 위한 변수입니다.
  • Selected : 파일선택창에서 파일이 선택 되어있는지 여부를 정수로 받아옵니다.
  • i : 파일선택창에서 선택된 파일(들)의 순번을 나타냅니다.
  • ReturnStr : 선택된 파일(들)의 파일경로를 나타내는 텍스트입니다.
Sub Multiple_FileDialog()
 
Dim FDG As FileDialog
Dim Selected As Integer: Dim i As Integer
Dim ReturnStr As String
 
Set FDG = Application.FileDialog(msoFileDialogFilePicker)
 
End Sub

2. 파일선택창 (File Dialogue) 환경설정

파일선택창을 아래와 같이 설정합니다.

  • Title : 파일선택창 좌측 상단에 보이는 제목을 설정합니다.
  • Fileters.Add : 선택할 수 있는 파일 확장자를 제한합니다.
  • InitialView : 파일선택창의 ‘보기종류’를 설정합니다.
  • InitialFileName : 파일선택창이 나타냈을 때의 초기 폴더경로를 설정합니다.
  • AllowMultiSelect : 다중선택을 허용할지 여부를 결정합니다.
With FDG
    .Title = "파일을 선택하세요"
    .Filters.Add "엑셀파일", "*.xls; *.xlsx; *.xlsm"
    .InitialView = msoFileDialogViewList
    .InitialFileName = ThisWorkbook.Path
    .AllowMultiSelect = True
    Selected = .Show
End With

3. 선택된 파일의 파일경로 받아오기

파일선택창에서 선택된 한 개 또는 여러 개의 파일 경로를 받아옵니다.

파일선택창에서 파일이 선택되었을 경우 Selected 변수는 -1을 반환하므로, Selected 변수가 -1일 경우에만 파일경로를 받아올 수 있도록 합니다.

Q: 파일이름에 콤마(,)가 들어갈 경우엔 어떻게 하나요?

파일이름에 콤마(,)가 들어갈 경우, 구분기호를 세로바(|)로 대체하여 코드를 작성합니다. 윈도우체제의 파일명에는 세로바(|) 사용이 금지되어 있으므로, 세로바(|)로 파일명을 구분할 경우 모든 상황에 대처할 수 있습니다.

If Selected = -1 Then  '파일이 선택되었을 경우 -1을 반환
    For i = 1 To FDG.SelectedItems.Count - 1
        ReturnStr = ReturnStr & FDG.SelectedItems(i) & ", "
        '// ReturnStr = ReturnStr & FDG.SelectedItems(i) & "| "
        '// 파일명에 콤마(,)가 들어갈 경우 구분기호를 세로바(|)로 대체합니다.
    Next i
    ReturnStr = ReturnStr & FDG.SelectedItems(.SelectedItems.Count)
End If

4. 에러핸들링 (오류처리)

파일 선택창에서 아무런 파일이 선택되지 않고 종료될 경우, VBA에서는 디버그오류를 반환합니다.

따라서 아무런 파일이 선택되지 않을 경우 사용자가 다시 파일을 선택하도록 유도하거나 또는 파일이 선택되지 않았다는 알림창을 띄우는 방법으로 오류처리를 합니다.

4-A. 사용자가 다시 파일을 선택하도록 유도하는 오류처리방법
SelectAgain:
'.... 파일선택 본문
 
If Selected = 0 Then
    MsgBox "선택된 파일이 없습니다. 파일을 다시 선택해주세요."
    Goto SelectAgain:
end if
4-B. 파일이 선택되지 않았다는 알림창을 띄우는 오류처리 방법
If Selected = 0 Then
    MsgBox "아무런 파일이 선택되지 않았습니다. 프로세스를 종료합니다."
    End
end if

5. 엑셀 VBA 파일선택창 마스터 코드

파일 선택창을 하나의 Function(함수)로 만들어 사용하면 다양한 VBA 모듈에서 효율적으로 사용할 수 있습니다.

아래 파일선택창 마스터 코드 전문을 활용해서 여러분의 VBA 프로그램을 더욱 멋지게 만들어보세요!

파일선택창 마스터 코드에 사용된 인수 설명
인수데이터구분설명기본값
TitleString[선택인수] 파일선택창 제목입니다."파일을 선택하세요."
FilterNameString[선택인수] 선택가능한 확장자그룹 이름입니다."엑셀파일"
FilterExtString[선택인수] 선택가능한 확장자 목록입니다."*.xls; *.xlsx; *.xlsm"
InitialFolderString[선택인수] 기본 시작폴더 경로입니다. (미입력시 '내문서' 폴더로 이동)""
InitialViewMsoFileDialogView[선택인수] 파일선택창 보기 형식입니다.msoFileDialogViewList
MultiSelectionBoolean[선택인수] 파일 다중선택 가능여부입니다.True
PathDelimiterString[선택인수] 다중선택된 파일을 구분할 구분자입니다."|"
파일선택창 마스터 코드 전문
Public Function Multiple_FileDialog(Optional Title As String = "파일을 선택하세요", Optional FilterName As String = "엑셀파일", _
Optional FilterExt As String = "*.xls; *.xlsx; *.xlsm", Optional InitialFolder As String = "", _
Optional InitialView As MsoFileDialogView = msoFileDialogViewList, Optional MultiSelection As Boolean = True, Optional PathDelimiter As String = "|", _
Optional withPath As Boolean = True, Optional withExt As Boolean = True) As String
 
Dim FDG As FileDialog
Dim Selected As Integer: Dim i As Integer
Dim ReturnStr As String: Dim tempStr As Variant
 
Set FDG = Application.FileDialog(msoFileDialogFilePicker)
 
With FDG
    .Title = Title
    .Filters.Add FilterName, FilterExt
    .InitialView = InitialView
    .InitialFileName = InitialFolder
    .AllowMultiSelect = MultiSelection
    Selected = .Show
 
    If Selected = -1 Then
        For i = 1 To FDG.SelectedItems.Count - 1
            If withPath = False Then tempStr = Right(FDG.SelectedItems(i), Len(FDG.SelectedItems(i)) - InStrRev(FDG.SelectedItems(i), "\")) Else tempStr = FDG.SelectedItems(i)
            If withExt = False Then tempStr = Left(tempStr, InStrRev(tempStr, ".") - 1)
            ReturnStr = ReturnStr & tempStr & PathDelimiter
        Next i
        If withPath = False Then tempStr = Right(FDG.SelectedItems(.SelectedItems.Count), Len(FDG.SelectedItems(.SelectedItems.Count)) - InStrRev(FDG.SelectedItems(.SelectedItems.Count), "\")) Else tempStr = FDG.SelectedItems(.SelectedItems.Count)
        If withExt = False Then tempStr = Left(tempStr, InStrRev(tempStr, ".") - 1)
        ReturnStr = ReturnStr & tempStr
 
        Multiple_FileDialog = ReturnStr
    ElseIf Selected = 0 Then
        MsgBox "선택된 파일이 없으므로 프로그램을 종료합니다."
        End
    End If
 
End With
 
End Function

6. 파일선택창 마스터 코드 활용하여 여러 개의 엑셀파일 동시에 실행하기

파일선택창 마스터 코드를 활용하여 아래와 같이 여러 개의 엑셀파일을 동시에 실행하는 명령문을 작성합니다.

Sub OpenFiles()
 
Dim SelectionStr As String
Dim Vars As Variant: Dim Var As Variant
 
SelectionStr = Multiple_FileDialog
 
Vars = Split(SelectionStr, "|")
 
For Each Var In Vars
    Application.Workbooks.Open Var
Next
 
MsgBox "선택된 엑셀 파일을 모두 실행하였습니다."
 
End Sub
5 3 votes
게시글평점
현재 페이지 댓글알림 신청
알림 설정
guest
5 Comments
Inline Feedbacks
View all comments
이동훈
이동훈
2020년 1월 26일 11:47 오전
게시글평점 :
     

잘봣슨당

큰돌삐
큰돌삐
2020년 2월 15일 11:26 오후
게시글평점 :
     

선택한 파일의 폴더주소는 버리고 파일명만 추출하려면 어떻게 해야합니까?

xuxin
xuxin
2020년 3월 31일 4:27 오후
게시글평점 :
     

Good

5
0
여러분의 생각을 댓글로 남겨주세요.x