Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(指定なし : 指定なし)
フィルタ機能で絞ったフォーム上のデータをCSV出力する方法について
投稿日時: 21/07/06 13:53:42
投稿者: だいふくもち

いつもこちらのコミュニティには大変お世話になっております。
皆さまのおかげで、私の部署向けに作成しているシステムもほぼほぼ完成しつつあります。
お力添えをいただいた皆様、本当にありがとうございました。
 
さっそくですが、質問に入らせていただきます。
現在、帳票式のフォームにコマンドボタンを設置しており、
押すとフォームのレコードソースであるクエリのデータを
CSVでデスクトップに出力するようにしています。
 
CSV出力ボタン

DoCmd.TransferText acExportDelim, , "クエリ名", _
wsh.SpecialFolders("Desktop") & "\ファイル名.csv", True

クエリ = クロス集計クエリ
 
また、フォームには検索ボタンを設置しており、
検索ボックスに入力した文字でフィルタを掛けるようにしております。
 
検索ボタン
Dim strFilter As String
If Not IsNull(Me.SEARCH契約番号) Then
     strFilter = strFilter & " AND 契約番号 Like '*" & Me.SEARCH契約番号 & "*'"
End If

If Not IsNull(Me.SEARCH請求先) Then
     strFilter = strFilter & " AND 請求先 Like '*" & Me.SEARCH請求先 & "*'"
End If

Me.Filter = Mid(strFilter, 6)
If strFilter = "" Then
    Me.FilterOn = False
Else
    Me.FilterOn = True
End If

SEARCH契約番号, SEARCH請求先 = 検索ボックスであるテキストボックスの名称
 
できれば、検索したワードで絞られたデータをCSVデータとして出力したいのですが、
調べてみても、検索の仕方が悪いのかどのような方法を取ればいいのか分かりませんでした…
 
このような場合、検索ボックスに入力したワードをWhere条件にして新たなクエリを作成し、
そのクエリをCSV出力するやり方になるのでしょうか?
ご存じの方がいらっしゃいましたら、教えていただけますと幸いです。

回答
投稿日時: 21/07/06 14:38:04
投稿者: Suzu

引用:
検索ボックスに入力したワードをWhere条件にして新たなクエリを作成し、
そのクエリをCSV出力するやり方になるのでしょうか?

 
容易な方法とすれば、そうなるでしょう。
 
 
他の方法とすれば、フォームのレコードセットプロパティーを取得し、
そのレコードセットから CSVを作成します。
 
・Excelを経由して良いなら、CopyFromRecordsetメソッドを使い、
  レコードセットの内容をセルに貼り付け、
  WorkBook または WorkSheet オブジェクトの、SaveAsメソッドの
  FileFormat引数に 6(xlCSV) を指定し保存
  
・Excelを使用しないなら、レコードセットの、GetRowsや、GetStringメソッドから
  出力する配列や、文字列を作成し、CSVファイルを開き(新規作成し)書き込む
  書き込む方法は
   Open Printメソッド
   ADOのStreamオブジェクト
    等、お好みで。

投稿日時: 21/07/07 14:13:32
投稿者: だいふくもち

>Suzu様
いつも助けていただきありがとうございます…!
なるほど、思った以上に色々なやり方があるのですね!
たくさんパターンを思いつけるのはすごいです…
 
教えていただいたCopyFromRecordsetメソッドをさっそく使ってみようと思い、
ネットで検索していると、下記のサイト様を発見し、こちらを参考にさせていただきました。
 
https://appdeappuappu.hateblo.jp/entry/2020/12/03/002904
 
おかげさまで無事、フィルター後のレコードをCSVで取り出すことができました!
ご教授いただき本当にありがとうございました!