이전 글에서 Workbooks 컬렉션의 파일 읽기 메서드 Open에 대해 알아보았습니다. 이번에는 불러올 파일을 지정하지 않은 상태에서 대화 상자를 통해 선택할 수 있는 메서드 GetOpenFilename에 대해 알아보겠습니다.
1. GetOpenFilename 메서드
Open 메서드의 경우에는 불러오려는 파일 이름과 경로를 알고 있는 상태에서 직접 타이핑 등으로 입력하여 파일을 불러왔습니다. 하지만, 파일 이름만 알고 경로를 모르거나 파일 이름은 모르나 저장 위치는 알고 있는 경우엔 Open 메서드만으로는 부족함을 느낍니다. 이럴 때 GetOpenFilename 메서드를 이용하면 대화 상자를 통해 파일을 선택하여 불러올 수 있습니다. 사용 방법은 다음과 같습니다.
Application.GetOpenFilename (매개변수)
매개변수에 입력되는 내용을 다음 표로 정리했습니다.
매개변수 | 설 명 |
Filefilter | 대화상자에 표시할 파일의 형식을 설정 |
FileIndex | Filefilter에서 여러 개 설정한 경우 처음에 표시할 형식의 인덱스 번호 지정 |
Title | 대화상자 제목 표시줄에 표시할 내용 |
MultiSelect | True인 경우 파일을 여러 개 선택 가능 |
Filefilter에 사용되는 파일 형식은 다음과 같이 작성하여 사용하시면 됩니다.
Application.GetOpenFilename (Filter:="모든 파일, *.*,엑셀 파일, *.xls*")
2. GetOpenFilename 메서드 사용 시 기본 폴더 설정
GetOpenFilename 메서드로 대화 상자를 불러올 때 처음에 열릴 폴더, 드라이브 등을 지정할 수 있습니다.
2.1 CurDir
CurDir 함수는 지정된 폴더 경로 값을 반환시켜 줍니다. 이를 이용하여 대화 상자가 열릴 때 지정된 폴더에서 열리도록 할 수 있습니다. 사용 방법은 다음과 같습니다.
CurDir 폴더 경로
폴더 경로(drive)에 지정하고자 하는 경로를 입력합니다. 폴더 경로를 생략하면 현재 경로가 반환됩니다.
2.2 ChDrive
ChDrive 함수는 입력된 드라이브로 경로를 변경합니다. 사용 방법은 다음과 같습니다.
ChDrive 폴더 경로
폴더 경로(drive)에 지정하고자 하는 드라이브 경로를 입력합니다.
2.3 ChDir
ChDir 함수는 지정한 경로로 값을 변경합니다. 사용 방법은 다음과 같습니다.
ChDir 폴더 경로
폴더 경로(drive)에 지정하고자 하는 폴더 경로를 입력합니다.
3. 예제로 확인
Open 메서드에 대해 알아본 이전 글에서 작성한 예제를 일부 수정하여 GetOpenFilename 메서드에 대한 예제를 작성해 보겠습니다.
Private Sub CommandButton1_Click()
Dim file As Variant
Dim Op As Workbook
Dim IsOp As Boolean
file = Application.GetOpenFilename(FileFilter:="엑셀파일, *.xls*,모든파일, *.*", Title:="파일 선택")
If file = False Then
MsgBox "파일을 선택하지 않으셨습니다."
End If
On Error Resume Next
Set Op = Workbooks(Dir(file))
If IsOp = (Err.Number = 0) Then
Workbooks.Open Filename:=file
Else
MsgBox ("파일이 열려있습니다.")
Exit Sub
End If
End Sub
코드 중에서 빨간색으로 표시된 부분이 수정된 부분입니다.
Dim file As Variant
: 파일을 선택했는지 여부를 확인하기 위해서 변수 file을 variant 형식으로 지정하였습니다.
file = Application.GetOpenFilename(FileFilter:="엑셀파일, *.xls*,모든파일, *.*", Title:="파일 선택")
: 변수 file에 대화 상자에서 선택한 파일을 입력하도록 하였습니다. 대화상자 출력 시 파일 형식은 엑셀파일과 모든파일 두 가지 형식으로 지정하였으며 대화 상자 제목으로는 파일 선택으로 설정하였습니다.
If file = False Then
MsgBox "파일을 선택하지 않으셨습니다."
End If
: 이 If 문은 대화 상자에서 파일을 선택하지 않고 취소 버튼을 클릭한 경우 '파일을 선택하지 않으셨습니다.'라는 내용의 메시지 창을 띄우라는 명령입니다.
variant 형식의 file 변수에 값이 입력되지 않은 경우 Boolean 값으로 False를 반환한다는 것을 기억하셨으면 좋겠습니다. 이 코드는 굳이 입력하시지 않아도 프로그램 실행에는 지장이 없습니다.
이 코드에서 파일을 읽어온 후 다시 파일 열기 버튼을 클릭하면 파일을 읽기 위해 이동했던 폴더에서 대화 상자가 열리게 됩니다. 버튼을 클릭할 때 항상 지정한 폴더에서 열리도록 하기 위해서는 다음과 같은 내용이 추가되어야 합니다. (빨간색으로 표시)
Private Sub CommandButton1_Click()
Dim file As Variant
Dim Op As Workbook
Dim IsOp As Boolean
Dim ori_dir As String
ori_dir = CurDir
file = Application.GetOpenFilename(FileFilter:="엑셀파일, *.xls*,모든파일, *.*", Title:="파일 선택")
If file = False Then
MsgBox "파일을 선택하지 않으셨습니다."
End If
On Error Resume Next
Set Op = Workbooks(Dir(file))
If IsOp = (Err.Number = 0) Then
Workbooks.Open Filename:=file
Else
MsgBox ("파일이 열려있습니다.")
Exit Sub
End If
ChDrive ori_dir
ChDir ori_dir
End Sub
Dim ori_dir As String
: 문자열 변수 ori_dir을 선언합니다.
ori_dir = CurDir
: 현재 디렉터리 경로를 변수 ori_dir에 입력합니다. 처음 시작하는 폴더 위치를 변수에 미리 저장하는 것입니다.
ChDrive ori_dir
: 드라이브 위치를 변수 ori_dir에 저장되어 있는 드라이브로 변경합니다.
ChDir ori_dir
: 현재 폴더위치를 변수 ori_dir에 저장된 폴더 위치로 변경합니다.
'엑셀 > VBA' 카테고리의 다른 글
엑셀 VBA UserForm 만들기 및 화면에 출력하기 (0) | 2022.01.04 |
---|---|
엑셀 VBA 파일 닫기 및 새로 만드는 메서드 - Close, Add (0) | 2021.12.31 |
엑셀 VBA 파일 열기 메서드 - Open (0) | 2021.12.29 |
엑셀 VBA PageSetup 속성에 대해 알아보기 (0) | 2021.12.28 |
엑셀 VBA 인쇄시 머리글 및 바닥글 설정하기 속성 - PageSetup (0) | 2021.12.27 |