ファイルを開くダイアログを表示する方法
◆概要
このページは、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