Microsoft Access 掲示板

フォームでフィルタリングしたデータをエクスポートしたい / 5

8 コメント
views
4 フォロー
5
hatena 2022/06/03 (金) 13:55:36 修正

方法としては、主に下記の2つになります。

  1. クエリで抽出条件を設定する。そのクエリをフォームのレコードソースにして、再クエリで抽出条件を反映させる。
    このクエリをDoCmd.TransferText メソッドでエクスポートする。

  2. フォームのFilterプロパティに抽出条件を設定して、フィルタリングする。
    VBAでクエリのWHERE句をフォームのFilterプロパティで書き換える。
    このクエリをDoCmd.TransferText メソッドでエクスポートする。

前者は、シンプルですが対象フィールドが複数になると条件が複雑になりがちです。(PCTipsさんのリンク先参照)
魔法使いの開発工房さんの方法(=りんごさんの回答)は、割とシンプルですが、Null値のレコードは抽出されません。(それでも問題ない、あるいはNull値はないないら、これでいいでしょう。)

現状は、フォームのFilterプロパティに抽出条件を設定しているのて、2.の方法のサンプルを提示しておきます。

'Microsoft Office XX.X Access Database Engine Object Library に参照設定必用
Private Sub エクスポートボタン_Click()
    Dim db As DAO.Database
    Dim qd As DAO.QueryDef
    Dim strFilter As String
    Dim strSQL As String

    'フィルターが設定されてなかったら実行しない
    If Me.Filter = "" Or Me.Filter = "False" Then Exit Sub

    'クエリのSQLにWHERE句を追加
    Set qd = db.QueryDefs("クエリ1")
    strSQL = Replace(qd.SQL, ";", "")
    qd.SQL = strSQL & " WHERE " & Me.Filter & ";"

    'テキストエクスポート
    DoCmd.TransferText acExportDelim, "エクスポート定義1", "クエリ1", _
             "C:\Test\Output.txt"

    'クエリのSQLを元に戻す
    qd.SQL = strSQL & ";"
End Sub

クエリ1 はWHERE句のないシンプルなもの。
事前にクエリ1でエクスポートして、エクスポート定義を作成しておく。
エクスポート定義で、タブ区切り、やデータ型などを設定する。

通報 ...