이런 다이알로그박스를 띄울 수 있는 API를 좀더 사용하기 쉽게 만든 모듈입니다.
'--- 바람개비(cjh9217)
'--- http://blog.naver.com/cjh9217
Private Type OPENFILENAME
lStructSize As Long
HwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type
Private Const MAX_PATH = 256&
Private Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Private Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long
'### 형식 및 인자설명 ##########################################################
'-- IsSaveMode : True이면 파일 저장, False이면 파일 열기 다이알로그 생성
'-- HwndOwner : 다이알로그박스를 소유할 핸들(0이면 바탕화면)
'-- hInstance : App.hInstance
'-- Filter : 필터의 형식
' ex) 모듈 파일(*.bas)|*.bas|모든파일(*.*)|*.*
'-- DlgTitle : 선택적 인수. 다이알로그박스 타이틀바의 제목
'-- initDir : 선택적 인수. 맨 처음 초기화될 경로
'
'-- Return : 선택한 파일의 경로를 반환. 취소를 누르면 vbNullString 반환
'###############################################################################
Public Function OpenFileDlg(ByVal IsSaveMode As Boolean, _
ByVal HwndOwner As Long, _
ByVal hInstance As Long, _
ByVal Filter As String, _
Optional ByVal DlgTitle As String = "파일 선택", _
Optional ByVal initDir As String = "C:\" _
) As String
Dim OFN As OPENFILENAME
With OFN
.lStructSize = Len(OFN)
.HwndOwner = HwndOwner
.hInstance = hInstance
.lpstrFilter = Replace$(Filter, "|", vbNullChar) & vbNullChar
.lpstrFile = Space$(MAX_PATH - 1)
.nMaxFile = MAX_PATH
.lpstrFileTitle = Space$(MAX_PATH - 1)
.nMaxFileTitle = MAX_PATH
.lpstrInitialDir = initDir
.lpstrTitle = DlgTitle
End With
If issavemdoe Then
If GetSaveFileName(OFN) Then
OpenFileDlg = Split(OFN.lpstrFile, vbNullChar, 2)(0)
End If
Else
If GetOpenFileName(OFN) Then
OpenFileDlg = Split(OFN.lpstrFile, vbNullChar, 2)(0)
End If
End If
End Function