728x90

application .GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect)

- FileFilter : 파일 필터링 조건을 지정하는 문자열, 생략하면 모든 파일 종류를 표시

- FilterIndex : 1부터 FileFilter 에서 지정한 필터 개수까지 기본 파일 필터링 조건의 인덱스 번호를 지정

- Title : 대화 상자의 제목을 지정. 생략하면 대화 상자의 제목은 "열기"로 표기됨

- ButtonText : 매킨토시 전용

- MultiSelect : True 이면 파일을 여러개 선택 가능, False 이면 1개만 선택 가능, 생략하면 False


GetOpenFilename 메서드를 이용해서 표준 열기 대화상자를 실행하면 항상 마지막으로 선택했던 폴더가 표시된다.


fName = Application.GetOpenFilename(Title:="엑셀파일열기", FileFilter:="Excel Files *.xls* (*.xls*),")

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


연습하면서 사용했던 파일


fileToOpen.xlsm


블로그 이미지

Link2Me

,