Microsoft Access Club >初心者講座 >Mail管理ソフト >このページ >次頁 - 前項


システム構成_モジュール-2:Mail管理ソフト04



ここでは、使用する標準モジュールの内、全て「ファイルを開くダイアログ」に関するものをModule2に収載しています。

サンプル図

下図のようなダイアログが開き、ファイルを選択できます。サンプル図は、WinXP+Access2003の組み合わせです。


ファイルを開くプロシージャ群

これらのプロシージャを用いることで、WindowAPIを利用してWindowsPC内でファイルを開くことができるようになります。 このAPIを用いる利点は、利用するAccessバージョンとWindowsバージョンを問わないことです。このWinsowsAPIを利用する以外にも、AccessやOfficeのバージョンによって以下の方法もあります。
  1. ファイルを開くダイアログ - Excel Library の利用:SampleFile211
  2. ファイルを開くダイアログボックスを利用する方法 - Officeライブラリー:SampleFile159

なお、1〜2の方法を用いる方が構造が簡易で理解しやすいと思います。この場合は、以下のプロシージャは不要です。

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

'[ファイルを特定]ダイアログ フィルタに使用するフィルタ文字列。
'これを開くには、ACC_CreateFilterString()を使用。
'既定値は、すべてのファイル,*.*
Type ACC_OpnFileNM

    '表示するフィルタの初期値、既定値は 1
    strFilter As String
    'ダイアログに表示される初期ディレクトリ名。
    '既定値はカレントディレクトリ
    lngFilterIdx As Long
    'ダイアログに表示される初期ファイル名、既定値は、""
    strInitialDir As String
    'ダイアログに表示されるMyTitle名、既定値は、""
    strInitialFile As String
    '拡張子が指定されなかった場合、ファイルに追加する既定の拡張子。
    '既定値はシステム値
    strDialogTitle As String
    'フラグ、既定値は、フラグなし
    strDefaultExtension As String
    '選択されたファイルのフルパス。
    'ダイアログでユーザーが拡張子のないファイルを選択すると、
    '[ファイル名]ボックスのテキストだけが返される
    lngFlags As Long
    '選択されたファイルの名前
    strFullPathReturn As String
     'フルパスのファイル名の開始を示すオフセット
    strFileNameReturn As String
    'フルパスのファイルの拡張子の開始を示すオフセット
    intFileOffset As Integer
    intFileExtension As Integer
    
End Type

Type OPENFILENAME

    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As Long
    nMaxCustrFilter As Long
    nFilterIdx 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
    lCustrData As Long
    lpfnHook As Long
    lpTemplateName As Long
    
End Type

Const AllFile = "すべてのファイル"
Const OFN_HIDEREADONLY = &H4
 
Function GetFile(strSearchPath) As String

'[ファイルを特定]ダイアログ ボックスを表示。
'戻り値は、選択したファイルへのパス。
    Dim accof As ACC_OpnFileNM
    
    'ダイアログ ボックスのオプションを設定。
    accof.strDialogTitle = "ファイルを特定"
    accof.strInitialDir = strSearchPath
    
    '以下の設定で、拡張子の増減や選択ができます。
    'エクセルなら.xlsを、ワードなら.docを記述します。
    accof.strFilter = ACC_CreateFilterString("txtファイル(*.txt)", _
                        "*.txt", "すべてのファイル(*.*)", "*.*")
                                
    '[ファイルを特定] ダイアログボックスのルーチンを呼び出す。
    ACC_GetOpenFileName accof
    'パスとファイル名を返す。
    GetFile = Trim(accof.strFullPathReturn)

End Function
 
Function ACC_CreateFilterString(ParamArray varFilt() As _
                                    Variant) As String
        
    '渡された引数からフィルタ文字列を作成。
    '引数として何も渡されなかった場合は、
    '長さ 0 の文字列 ("") を返す。
    '引数が奇数個渡された場合、それに *.* を追加。
    Dim strFilter As String
    Dim intRet As Integer
    Dim intNum As Integer

    intNum = UBound(varFilt)
    If (intNum <> -1) Then
    
        For intRet = 0 To intNum
            strFilter = strFilter & varFilt(intRet) & vbNullChar
        Next
        
        If intNum Mod 2 = 0 Then
            strFilter = strFilter & "*.*" & vbNullChar
        End If
        
        strFilter = strFilter & vbNullChar
    Else
        strFilter = ""
    End If

    ACC_CreateFilterString = strFilter
    
End Function
 
Function ACC_GetOpenFileName(accof As ACC_OpnFileNM) As Integer

    '「ファイルを特定」ダイアログ ボックスを開く。
    Dim of As OPENFILENAME
    Dim intRet As Integer

    Accof_to_Of accof, of
    intRet = GetOpenFileName(of)
    
    If intRet Then
        Of_to_Accof of, accof
    End If
    
    ACC_GetOpenFileName = intRet
    
End Function
 
Sub Of_to_Accof(of As OPENFILENAME, accof As ACC_OpnFileNM)

'win32構造体をACC_OpnFileNM構造体に変換する。
    accof.strFullPathReturn = Left(of.lpstrFile, _
                            InStr(of.lpstrFile, vbNullChar) - 1)
    accof.strFileNameReturn = of.lpstrFileTitle
    accof.intFileOffset = of.nFileOffset
    accof.intFileExtension = of.nFileExtension
    
End Sub
 
Sub Accof_to_Of(accof As ACC_OpnFileNM, of As OPENFILENAME)

'このプロシージャは、ACC_OpnFileNM構造体をwin32構造体に変換する。
    Dim strFile As String * 512

    '構造体の一部を初期化。
    of.hwndOwner = Application.hWndAccessApp
    of.hInstance = 0
    of.lpstrCustomFilter = 0
    of.nMaxCustrFilter = 0
    of.lpfnHook = 0
    of.lpTemplateName = 0
    of.lCustrData = 0
    
    If accof.strFilter = "" Then
        of.lpstrFilter = ACC_CreateFilterString(AllFile)
    Else
        of.lpstrFilter = accof.strFilter
    End If
    
    of.nFilterIdx = accof.lngFilterIdx
    of.lpstrFile = accof.strInitialFile & _
                    String(512 - Len(accof.strInitialFile), 0)
    of.nMaxFile = 511
    of.lpstrFileTitle = String(512, 0)
    of.nMaxFileTitle = 511
    of.lpstrTitle = accof.strDialogTitle
    of.lpstrInitialDir = accof.strInitialDir
    of.lpstrDefExt = accof.strDefaultExtension
    of.Flags = accof.lngFlags
    of.lStructSize = Len(of)
    
End Sub
 

ページの先頭へ 前ページへ戻る



システム構成_モジュール-2:Mail管理ソフト04


-Microsoft Access Club-

アメリカ合衆国やヨーロッパのデータセンターからcPanelレンタルサーバーをご提供します。お支払いは日本国内の銀行振込で...。1ヵ月契約からOKです。
アメリカ合衆国やヨーロッパからcPanelレンタルサーバー。
お支払いは日本国内の銀行振込。
最短契約期間は1ヵ月契約からOKです。