トップへ(mam-mam.net/)

Accessでファイル選択ダイアログを使うには

検索:

「Accessでファイル選択ダイアログを使うには」

Accessでファイル選択ダイアログを使うにはどうすればよいでしょうか。

回答

GetOpenFileNameというAPI関数を使います。

ソース

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

Public Type OPENFILENAME
    lStructSize As Long         'この構造体の長さ
    hwndOwner As Long           '呼び出し元ウインドウハンドル
    hInstance As Long
    lpstrFilter As String       'フィルタ文字列
    lpstrCustomFilter As String
    nMaxCustrFilter As Long
    nFilterIndex As Long
    lpstrFile As String         '選択されたファイル名(フルパス)
    nMaxFile As Long            'lpstrFileのバッファサイズ
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String   '初期フォルダ名
    lpstrTitle As String        'コモンダイアログのタイトル名
    flags As Long               'フラグ
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String       'ファイル名の入力時、拡張子が省略された時の拡張子
    lCustrData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type



Function OpenFileDlg() As String
Dim FileSt As OPENFILENAME
Dim lngRet As Long, NULLPos As Long
Dim FileName As String
   
path = CurDir()
    With FileSt                             'GetOpenFileName関数APIに渡す構造体
        .hwndOwner = Screen.ActiveForm.Hwnd 'アクティブなフォームのハンドルを取得
        .lStructSize = Len(FileSt)
        .lpstrInitialDir = path             '(最初に表示するディレクトリ)
                                            '(フィルターでファイル種類を絞る)
        .lpstrFilter = "Excel(*.xls)" & vbNullChar & "*.xls" _
        & vbNullChar & "Text(*.txt)" & vbNullChar & "*.txt"
        .nMaxFile = 256                        '(ファイル名の最大長(パス含む))
        .lpstrFile = String(256, vbNullChar)   '(ファイル名を格納する文字列
                                                ' NULLで埋めておく)
    End With
    
    lngRet = GetOpenFileName(Fkouzou)   'ファイル選択ダイアログを表示。
                                '(「開く」を押すと.lpstrFileにファイル名が格納される。)
    
    NULLPos = InStr(Fkouzou.lpstrFile, vbNullChar)  'ファイル名の終り(NULLの位置)を調べる
    FileName = Left(Fkouzou.lpstrFile, NULLPos - 1) 'ファイル名の有効部分を取り出す
    
    OpenFileDlg = FileName

End Sub