application .GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)
- FileFilter : 파일 필터링 조건을 지정하는 문자열, 생략하면 모든 파일 종류를 표시
- FilterIndex : 1부터 FileFilter 에서 지정한 필터 개수까지 기본 파일 필터링 조건의 인덱스 번호를 지정
- Title : 대화 상자의 제목을 지정. 생략하면 대화 상자의 제목은 "열기"로 표기됨
- ButtonText : 매킨토시 전용
- MultiSelect : True 이면 파일을 여러개 선택 가능, False 이면 1개만 선택 가능, 생략하면 False
GetOpenFilename 메서드를 이용해서 표준 열기 대화상자를 실행하면 항상 마지막으로 선택했던 폴더가 표시된다.
fNames = Application.GetOpenFilename(MultiSelect:=True)
fNames = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", MultiSelect:=True)
fNames = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", Title:="Choose Files", MultiSelect:=True)
ThisWorkbook.Path '// 현재 폴더의 경로
FileFilter 를 열어서 여러개 지정하려면, "MS-Word, *.doc, Text Files, *.txt" 와 같은 형태로 하면 된다.
파일을 1개만 선택하게 하려면, MultiSelect:=False 로 설정한다.
Sub MultiFiles()
Dim fNames As Variant
Dim Msg As String
Dim i As Long
fNames = Application.GetOpenFilename(FileFilter:="Excel Files (*.xls*), *.xls*", MultiSelect:=True)
On Error Resume Next
If TypeName(fNames) = "Boolean" Then Exit Sub
'// 취소 선택 시 매크로 종료, 변수를 Variant 아닌 String 으로 하면 에러가 발생됨
If IsArray(fNames) Then
Msg = "You selected:" & vbNewLine
For i = LBound(fNames) To UBound(fNames)
Msg = Msg & fNames(i) & vbNewLine
Next i
MsgBox Msg
End If
End Sub
파일을 열고자 한다면
Workbooks.Open FileName:=fName
Sub Open_FileDialog()
Dim fName As Variant
'// 하나의 필터 규칙에 여러 개의 파일 형식을 포함하고자 할 경우에는 세미콜론(;) 을 사용
fName = Application.GetOpenFilename(FileFilter:="Text Files, *.txt ; *.smi ; *.srt", MultiSelect:=False)
If TypeName(fName) = "Boolean" Then
Exit Sub '// 취소 선택 시 매크로 종료
Else
Shell "Notepad.exe " & fName
End If
End Sub
연습하면서 사용했던 파일
'업무 능력 향상 > 엑셀 VBA 기초' 카테고리의 다른 글
[VBA기초] 현재 폴더명, 상위폴더명 표시하기 (0) | 2015.06.22 |
---|---|
[VBA기초] Round 함수 (0) | 2015.06.14 |
Error Trapping with Visual Basic for Applications (0) | 2015.06.09 |
[VBA기초] 날짜 표시 (0) | 2015.06.06 |
[VBA기초] 편리한 범위 지정(시작행, 마지막행) (0) | 2015.06.04 |