본문 바로가기

엑셀/VBA

엑셀 VBA 대화상자를 통해 파일 선택하여 불러오기 메서드 - GetOpenFilename

반응형

이전 글에서 Workbooks 컬렉션의 파일 읽기 메서드 Open에 대해 알아보았습니다. 이번에는 불러올 파일을 지정하지 않은 상태에서 대화 상자를 통해 선택할 수 있는 메서드 GetOpenFilename에 대해 알아보겠습니다.

 

엑셀 VBA 파일 열기 메서드 - Open

 

엑셀 VBA 파일 열기 메서드 - Open

이전 글에서 PageSetup 속성에 대해 알아보았습니다. 이번에는 Workbooks의 개체로 파일을 열 때 사용하는 Open 메서드에 대해 알아보겠습니다. 엑셀 VBA PageSetup 속성에 대해 알아보기 엑셀 VBA PageSetup

mr-johndoe.tistory.com

 

 

 

 

 

 

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에 저장된 폴더 위치로 변경합니다.

반응형