【Access⑬】テーブルにインポートするファイルをダイアログで選択する

Accessのテーブルにインポートする際に、ダイアログを表示し、ファイルを選択できるようにするには?
以前の記事では、繰り返し外部データをインポートする時には、インポート定義を作成し、省力化していました。しかしながら、インポートするファイルが固定なので少々扱いずらいと思います。今回の記事ではファイルを選択できるようにする方法を解説します。

目次

フォームにコマンドボタンとテキストボックスを一つ作る

フォームをデザインビューで開き、コマンドボタンとテキストボックスを設置します。
コマンドボタンは以前の記事で作成したものを転用してもいいです。

  1. コマンドボタンを設置する。以前の記事で作成したインポートボタンを転用頂いても構いません。
  2. テキストボックスを一つ設置します。テキストボックスの名前を控えておきましょう。
    ※フォームビューで見えなくても問題ないので、プロパティで可視を「いいえ」にしておくと見えなくできます。

標準モジュールを作成する

  1. リボンの作成タブをクリックします。
  2. 標準モジュールをクリックします。

VBAを記述(コピペ)する

VBAの編集画面が開きますので、以下のように記述します。下にコピー用に記載しています。

コピー用VBA
Function FileSelect()
'参照設定 Microsoft office14.0 Object Library必要
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を返します。
    Dim inttype As Integer
    Dim varSelectedFile As Variant
    'ファイルを選択する場合は、msofiledialogfilepicker
    'フォルダーを選択する場合は、msofiledialogfolderpicker
    inttype = msoFileDialogFilePicker
    'ファイル参照用の設定値をセットします。
    With Application.FileDialog(inttype)
        'ダイアログタイトル名
        .Title = "ファイル選択"
        'ファイルの種類を定義します。
        '.Filters.Add "xls ファイル", "*.csv"
        '.Filters.Add "xlsファイル", "*.csv"
        .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
Exit Function
ErrorHandler:
MsgBox "予期せぬエラーが発生しました" & Chr(13) & _
        "エラーナンバー:" & Err.Number & Chr(13) & _
        "エラー内容:" & Err.Description, vbOKOnly
End
End Function

参照設定を追加する

上記のVBAだけでは機能が不足しているので、参照設定から追加します。

  1. 画面上部のメニューにある[ツール]をクリックします。
  2. [参照設定]をクリックします。

Access2010の場合

参照可能なライブラリファイルの一覧が表示されます。かなり項目が多いですが、「Microsoft Office 14.0 Object Library」にチェックを入れます。

Access2021の場合

Access2021では「Microsoft Office 16.0 Object Library」でした。環境によっての赤文字部分が異なるかもしれません。

フォームのコマンドボタンにVBAを記述する

フォームに設置したコマンドボタンのクリック時イベントに以下のコードを記述します。

コマンドボタンのVBA

Private Sub コマンド0_Click()

Me.(テキストボックス名) = FileSelect
Dim ps As String
ps = Me.(テキストボックス名)
DoCmd.SetWarnings False
DoCmd.TransferText acImportDelim, "(インポート定義名)", "(インポートするテーブル名)", ps, False, ""
MsgBox "インポートしました。", vbOKOnly, ""

End Sub

実行結果

実行すると、ファイルを選択するダイアログが開きました!これでその都度、決まったファイル名に変更する手間がなくなります。

  • URLをコピーしました!
目次