ファイルを開くダイアログを表示する方法

◆概要

 このページは、Visual Basic 6.0でファイルを開くダイアログを表示する方法について記載しています。

 次に紹介するShowOpenFileDlg関数は、OCXやDLLなどを一切使わずに、APIだけで[ファイルを開く]ダイアログボックスを表示して、 ユーザーにファイルを選択させ、選択したファイルを取得します。

◆標準モジュール

Option Explicit

'[ファイルを開く]と[ファイルを保存]ダイアログボックスの為の構造体宣言
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


' [ファイルを開く]ダイアログボックスを呼び出すAPI

Private Declare Function GetOpenFileName _
        Lib "comdlg32.dll" Alias "GetOpenFileNameA" _
        (pOpenfilename As OPENFILENAME) As Long

' OPENFILENAME構造体のflagsで指定する定数
Public Const OFN_READONLY = &H1         ' [読み取り専用]チェックボックスをチェック
' ファイルが存在していた場合、上書きを問い合わせる
Public Const OFN_OVERWRITEPROMPT = &H2
Public Const OFN_HIDEREADONLY = &H4     ' [読み取り専用]チェックボックスを非表示
Public Const OFN_SHOWHELP = &H10        ' [ヘルプ]ボタンの表示
Public Const OFN_ALLOWMULTISELECT = &H200 ' 複数のファイルを選択可能に
Public Const OFN_EXTENSIONDIFFERENT = &H400
Public Const OFN_PATHMUSTEXIST = &H800  ' 存在しないパス名を入力不可に
Public Const OFN_FILEMUSTEXIST = &H1000 ' 存在しないファイル名を入力不可に
' ファイルが存在しなかった場合、新規作成するかどうか表示
Public Const OFN_CREATEPROMPT = &H2000
Public Const OFN_EXPLORER = &H80000

'--------------------------------------------------------
'   関数名  : ShowOpenFileDlg
'   用途    : [ファイルを開く]ダイアログを表示してファイル名を取得する
'   引数    : lngHWnd   ダイアログの親ウィンドウのハンドル
'             strFilter ファイルを選別するのフィルタ
'               "テキストファイル(*.TXT)" & vbNullChar & "*.txt"
'               のように、ファイルの種類とフィルタをNull文字で区切って渡す
'             strDefDir ダイアログのデフォルトディレクトリ
'   戻り値  : 選択されたファイル名。キャンセルされた場合は何も戻らない
'   備考    : なし
'--------------------------------------------------------
Public Function ShowOpenFileDlg( _
    lngHWnd As Long, _
    strFilter As String, _
    strDefDir As String _
    ) As String
    
    Dim strRePathName As String
    Dim typOpenFileName As OPENFILENAME
   
    With typOpenFileName
        ' サイズの設定
        .lStructSize = Len(typOpenFileName)
        ' 親Windowの指定
        .hwndOwner = lngHWnd
        ' アプリケーションのインスタンスを指定
        .hInstance = App.hInstance
        ' フィルタの種類を設定
        .lpstrFilter = strFilter
        ' アクティブなフィルタの番号を設定
        .nFilterIndex = 1
        ' [ファイル名]ボックスの内容を初期化
        .lpstrFile = String(256, Chr(0))
        ' 最大ファイル長の設定
        .nMaxFile = 256
        ' ファイルのタイトルを受け取るポインタ
        .lpstrFileTitle = String(256, Chr(0))
        ' 最大ファイル長の設定
        .nMaxFileTitle = 256
        ' デフォルトディレクトリの設定
        .lpstrInitialDir = strDefDir
        ' ダイアログのタイトルを設定
        '.lpstrTitle = "ファイルを開く"
        ' オプションの設定
        .flags = OFN_EXPLORER Or OFN_PATHMUSTEXIST _
            Or OFN_FILEMUSTEXIST Or OFN_HIDEREADONLY
    End With
    

    '[ファイルを開く]ダイアログの表示
    If GetOpenFileName(typOpenFileName) = 0 Then
        'キャンセルされた場合
        ShowOpenFileDlg = ""
    Else
        ' OKボタンが押された場合、ファイル名の表示
        ' Null文字の除去
        ShowOpenFileDlg = Left(typOpenFileName.lpstrFile, _
                InStr(typOpenFileName.lpstrFile, vbNullChar) - 1)
    End If
End Function


▼ページトップへ

◆フォームモジュール

Private Sub Command1_Click()
    ' ファイル名を格納する変数の宣言
    Dim strFileName As String
    
    strFileName = ShowOpenFileDlg(Me.hWnd, _
            "テキストファイル(*.TXT)" & vbNullChar & "*.txt", "C:\")
    ' メッセージボックスに表示
    MsgBox "選択したファイル名は" & strFileName & "です。"
End Sub


▼ページトップへ