方法としては、主に下記の2つになります。
クエリで抽出条件を設定する。そのクエリをフォームのレコードソースにして、再クエリで抽出条件を反映させる。
このクエリをDoCmd.TransferText メソッドでエクスポートする。フォームの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でエクスポートして、エクスポート定義を作成しておく。
エクスポート定義で、タブ区切り、やデータ型などを設定する。
通報 ...
魔法使いの開発工房さんところのはフィールドで
True
/False
を作る手法なのでNullなレコードも抽出対象ですよ(抽出条件はTrue
だけ)あ!よくみたら、りんごさんの式とは違いましたね。
ただ、この方法はインデックスが無効になるので、データ数が多いときは、避けたい方法ですね。
(フィールドが関数内に入っているので)
抽出条件でインデックスが無効になる場合 - hatena chips