Microsoft Access Club >SampleFile >インデックス >このページ >次頁 < 前項  サイト内検索


ファイルを開くダイアログボックスを利用する方法 - Officeライブラリー:SampleFile159



Accessを使っていて、下記のようなファイルを選択できるようなダイアログを呼び出したいと思うことは、Accessに慣れてくれば来るほど高まる要求です。

当サイトでも、No78.WindowsAPIを用いてファイルを開く方法 でご紹介しましたが、Windows API の利用ですからややっこしいのが難点でした。

今度登場したAccess2002では、ちょっとした操作でこれを実現させることができます。まぁ、Access2002に付属するものではなくて、Office2002に付属するのが正確ですけど、兎に角便利になりました。以下、順を追ってその方法をご紹介します。

重要

※Access2002、2003専属の運用です。 残念ながら、Access2000以下では利用できませんのでご承知ください。

Access2000、97をご利用の方は、

  • Excelコンポーネントの利用
  • Windows API の利用

で実現できます。 下記の関連ページを参照して下さい。

下準備

  1. Access2002を立ち上げ、VBE画面を呼び出します。
  2. このVBE画面とは「デーベースウィンドウ」上で右クリックし、 「Visual Basic Editor」を選択します。すると、VBEを記述するよく観る画面が現れますね。これがVBE画面です。
  3. 次に、ツールバーに目を向けて下さい。「ツール」から「参照設定」を選択しクリックします。
  4. 下記のように、ずらっとライブラリファイルが並んでますね。 恐らく、「Microsoft Office 10.0 Object Library」がチェック済みになっていないと思いますから、 スクロールバーを下げてチェックして下さい。

  1. これで下準備OKです。
  2. このライブラリーにチェック済みをしていないと、エラーになりますのでご注意ください。ちなみに、Access2000では「Microsoft Office 9.0 Object Library」が存在します。

標準モジュール

では、新規のAccessを立ち上げてモジュールに下記のFunctionプロシージャを記述します。

Function FileSelect()

On Error GoTo ErrorHandler  'エラー処理ルーチンを実行します。

    Dim Returnvalue As Variant
    Dim strmsg As String
    Returnvalue = SysCmd(acSysCmdAccessVer)
    strmsg = "Access2002、2003でないため、この機能を利用できません。"
    
    'Accessのバージョンを調べます。
    'Access2000は10.0、Access2000は9.0,Access97は8.0,Access95は7.0を返します。
    
    If Returnvalue = "10.0" Or Returnvalue = "11.0" Then
        
        Dim inttype As Integer
        Dim varSelectedFile As Variant
        
        'ファイルを選択する場合は、msofiledialogfilepicker
        'フォルダーを選択する場合は、msofiledialogfolderpicker
        inttype = msofiledialogfilepicker
        
        'ファイル参照用の設定値をセットします。
        With Application.FileDialog(inttype)
        
            'ダイアログタイトル名
            .Title = "ファイル選択 By Microsoft Access Club"
            
            'ファイルの種類を定義します。
            .Filters.Add "HTML ファイル", "*.html"
            .Filters.Add "HTMファイル", "*.htm"
            .Filters.Add "すべてのファイル", "*.*"
            
            '複数ファイル選択を可能にする場合はTrue、不可の場合はFalse。
            .AllowMultiSelect = False
            
            '最初に開くホルダーを当ファイルのフォルダーとします。
            .InitialFileName = CurrentProject.Path
        
            If .Show = -1 Then 'ファイルが選択されれば -1 を返します。
                For Each varSelectedFile In .SelectedItems
                    FileSelect = varSelectedFile
                Next
            End If
        
        End With
        
    Else
        
        MsgBox strmsg, vbOKOnly, "Microsoft Access Club"
     
    End If
    
Exit Function

ErrorHandler:

    MsgBox "予期せぬエラーが発生しました" & Chr(13) & _
            "エラーナンバー:" & Err.Number & Chr(13) & _
            "エラー内容:" & Err.Description, vbOKOnly
    End

End Function
解説

今回のサンプルは、フォーム上のテキストボックス(非連結)にコマンドボタンを押してPC内部のファイルを選択し、パスを代入するものです。

フォームに組み込んだイベントプロシージャ

コマンドボタンの「クリック時イベント」には下記のプロシージャを記述しています。

Private Sub Cmd_Click()

    'プロシージャ FileSelect を呼び出し、その値をテキストボックスに代入します。
    Me.txt_選択テキストボックス = FileSelect

End Sub
補足
SysCmd関数

今回、Access2002限定機能を使いますので、Accessバージョンを調べる SysCmd関数を組み込んで関数の戻り値(Access2002なら10.0)によってプロシージャの進行を制御しています。

Returnvalue = SysCmd(acSysCmdAccessVer)
(中略)
If Returnvalue = "10.0" Then
ファイルの複数選択

ファイルの複数同時選択も可能なように、ファイル名の取得に For Each 〜 Next を用いています。

'複数ファイル選択を可能にする場合はTrue、不可の場合はFalse
FD.AllowMultiSelect = False

If FD.Show = -1 Then 'ファイルが選択されれば -1 を返す。
    For Each varSelectedFile In FD.SelectedItems
        FileSelect = varSelectedFile
    Next
End If
フォルダー選択

今回はファイル選択でしたが、フォルダー選択にしたい場合は、

msofiledialogfilepicker   →   msofiledialogfolderpicker
 

と、入れ替えるだけでOKです。

関連ページ

ここで用いたサンプルファイルは、Access2002、2003専用ファイルです。ご注意ください。

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

 


ファイルを開くダイアログボックスを利用する方法 - Officeライブラリー:SampleFile159


 

-Microsoft Access Club-

Parallels社PLESKコントロールパネルの操作情報を発信しています。
Parallels社PLESKコントロールパネルの操作情報を発信中・・・。