Workbook 개체

GetOpenFilename 메서드

노만e 2025. 3. 14. 04:32

엑셀 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을 활용하면 사용자 입력을 받아 파일을 선택하고, 다양한 방식으로 처리할 수 있습니다! 🚀