엑셀 VBA에서 Application.GetOpenFilename 메서드는 사용자가 파일을 선택하도록 하는 대화상자를 표시합니다.
즉, 파일을 열지 않고 파일 경로만 가져올 때 사용됩니다.
1. 기본 문법
Application.GetOpenFilename ([FileFilter], [FilterIndex], [Title], [ButtonText], [MultiSelect])
|
매개변수
|
설명
|
기본값
|
FileFilter
|
파일 형식 필터 (예: "Excel 파일 (*.xlsx), *.xlsx")
|
모든 파일 (*.*)
|
FilterIndex
|
기본 선택할 필터의 인덱스 (1부터 시작)
|
1
|
Title
|
대화상자의 제목
|
"열기"
|
ButtonText
|
Mac에서만 사용 (Windows에서 무시됨)
|
없음
|
MultiSelect
|
여러 개의 파일 선택 허용 (True/False)
|
FALSE
|
📌 이 메서드는 파일을 열지 않고, 사용자가 선택한 파일의 경로만 반환
📌 파일을 열려면 Workbooks.Open을 사용해야 함
2. 기본 사용법 (파일 선택)
Sub 파일선택()
Dim 파일경로 As String
파일경로 = Application.GetOpenFilename
If 파일경로 <> "False" Then
MsgBox "선택한 파일 경로: " & 파일경로
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 파일을 선택하면 파일 경로를 메시지 박스로 표시
📌 파일 선택을 취소하면 "False"를 반환하므로 이를 체크해야 함
3. 특정 파일 형식 필터 설정
Sub 특정파일_선택()
Dim 파일경로 As String
파일경로 = Application.GetOpenFilename("Excel 파일 (*.xlsx;*.xlsm), *.xlsx;*.xlsm")
If 파일경로 <> "False" Then
MsgBox "선택한 파일: " & 파일경로
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 FileFilter 매개변수를 사용하여 Excel 파일(.xlsx, .xlsm)만 선택 가능하게 설정
4. 여러 개의 파일 형식 필터 추가
Sub 여러파일형식_선택()
Dim 파일경로 As String
파일경로 = Application.GetOpenFilename("Excel 파일 (*.xlsx;*.xlsm), *.xlsx;*.xlsm," & _
"CSV 파일 (*.csv), *.csv," & _
"모든 파일 (*.*), *.*", 1, "파일 선택")
If 파일경로 <> "False" Then
MsgBox "선택한 파일: " & 파일경로
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 사용자가 Excel 파일, CSV 파일, 모든 파일 중에서 선택할 수 있도록 필터 추가
📌 두 번째 매개변수(FilterIndex:=1)를 사용하여 기본적으로 첫 번째 필터(Excel 파일)가 선택됨
5. 여러 개의 파일 선택 (MultiSelect)
Sub 여러파일_선택()
Dim 파일들 As Variant
Dim i As Integer
파일들 = Application.GetOpenFilename("Excel 파일 (*.xlsx;*.xlsm), *.xlsx;*.xlsm", , , , True)
If IsArray(파일들) Then
For i = LBound(파일들) To UBound(파일들)
MsgBox "선택한 파일: " & 파일들(i)
Next i
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 MultiSelect:=True를 사용하여 여러 개의 파일을 선택할 수 있도록 설정
📌 사용자가 여러 개의 파일을 선택하면 배열로 반환되므로 For 루프를 사용하여 처리
6. 선택한 파일을 열기 (Workbooks.Open 활용)
Sub 파일열기()
Dim 파일경로 As String
파일경로 = Application.GetOpenFilename("Excel 파일 (*.xlsx;*.xlsm), *.xlsx;*.xlsm")
If 파일경로 <> "False" Then
Workbooks.Open 파일경로
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 선택한 파일을 Workbooks.Open을 사용하여 엑셀에서 열기
7. 선택한 여러 파일을 한 번에 열기
Sub 여러파일_한번에열기()
Dim 파일들 As Variant
Dim i As Integer
파일들 = Application.GetOpenFilename("Excel 파일 (*.xlsx;*.xlsm), *.xlsx;*.xlsm", , , , True)
If IsArray(파일들) Then
For i = LBound(파일들) To UBound(파일들)
Workbooks.Open 파일들(i)
Next i
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 사용자가 여러 개의 파일을 선택하면 모두 자동으로 엑셀에서 열기
8. 선택한 파일을 특정 위치에 복사
Sub 파일_복사()
Dim 파일경로 As String
Dim 대상경로 As String
파일경로 = Application.GetOpenFilename("모든 파일 (*.*), *.*")
If 파일경로 <> "False" Then
대상경로 = "C:\Users\Public\" & Dir(파일경로) ' 원래 파일명 유지
FileCopy 파일경로, 대상경로
MsgBox "파일이 복사되었습니다: " & 대상경로
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 사용자가 선택한 파일을 C:\Users\Public\ 폴더로 복사
9. 선택한 파일이 특정 확장자인지 확인
Sub 파일확장자_확인()
Dim 파일경로 As String
파일경로 = Application.GetOpenFilename("모든 파일 (*.*), *.*")
If 파일경로 <> "False" Then
If LCase(Right(파일경로, 4)) = ".xls" Or LCase(Right(파일경로, 5)) = ".xlsx" Then
MsgBox "엑셀 파일이 맞습니다!"
Else
MsgBox "선택한 파일이 엑셀 파일이 아닙니다!", vbExclamation
End If
Else
MsgBox "파일을 선택하지 않았습니다.", vbExclamation
End If
End Sub
|
📌 선택한 파일이 .xls 또는 .xlsx 확장자인지 확인 후 메시지 출력
📝 정리
기능
|
VBA 코드
|
파일 선택
|
Application.GetOpenFilename
|
특정 파일 형식 필터 설정
|
"Excel 파일 (*.xlsx;*.xlsm), *.xlsx;*.xlsm"
|
여러 개의 파일 필터 추가
|
"Excel 파일, *.xlsx;*.xlsm, CSV 파일, *.csv, 모든 파일, *.*"
|
여러 개의 파일 선택 허용
|
MultiSelect:=True
|
선택한 파일을 엑셀에서 열기
|
Workbooks.Open 파일경로
|
선택한 여러 파일을 한 번에 열기
|
For i = LBound(파일들) To UBound(파일들): Workbooks.Open 파일들(i): Next i
|
파일 복사
|
FileCopy 파일경로, 대상경로
|
파일 확장자 확인
|
If Right(파일경로, 4) = ".xls"
|
🔥 VBA의 GetOpenFilename을 활용하면 사용자 입력을 받아 파일을 선택하고, 다양한 방식으로 처리할 수 있습니다! 🚀