- ベストアンサー
ACCESSフォームフィルタで抽出したデータのみをレポートで表示する方法
フォームフィルターでデータを抽出した後,抽出されたデータのみをレポート上に表示させるコマンドボタンをフォーム上に作っています。 下記のコードを作成しましたが,これだと抽出前の全部のデータが表示されてしまいます。 どうしたら良いでしょうか。 Private Sub ラベルプレビュー_Click() Dim stDocName As String DoCmd.Echo False, stDocName = "rpt宛名ラベル" DoCmd.OpenReport stDocName, acViewDesign DoCmd.SelectObject acReport, stDocName, False ' Reports(stDocName).RecordSource = Me.RecordSource DoCmd.OpenReport stDocName, acViewPreview End Sub
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
Private Sub ラベルプレビュー_Click() Dim stDocName As String stDocName = "rpt宛名ラベル" If Me.FilterOn Then DoCmd.OpenReport stDocName, acViewPreview,,Me.Filter Else DoCmd.OpenReport stDocName, acViewPreview End If End Sub で、いかがでしょうか?
その他の回答 (2)
補足: レポートで再フィルタするよりもネットワークトラフィックは混雑しないかと思います。 は、No1さんのやり方のことじゃないです。 No2とNo1は、実質的には同じだと思います。
テーブル<Customer> cuntomer_num__company_________kname_______zipcode__address1__address2__building__phone ______________101__スポーツランド__鈴木 一郎__150-_____東京都_____渋谷区____Aビル___(03)400-333 ______________102__スポーツランド__岡島 一郎__150-____東京都_____渋谷区____Bビル__(03)400-444 ______________103__スポーツランド__田中 一郎__150-_____東京都_____渋谷区____Cビル___(03)400-555 フォーム<Customer> Private Sub コマンド_フィルタの実行_Click() Me.FilterOn = False Me.Filter = "kname Like '鈴木*'" Me.FilterOn = True End Sub Private Sub コマンド_レポートのプレビュー_Click() On Error Resume Next Dim strSQL As String strSQL = "SELECT * FROM CUSTOMER" If Me.FilterOn Then strSQL = strSQL & " WHERE " & Me.Filter End If DoCmd.OpenReport "Customer", acPreview, , , , strSQL End Sub レポート<Customer> Private Sub Report_Open(Cancel As Integer) Me.RecordSource = Me.OpenArgs End Sub ここでは、レポートのレコードソース情報をフォームのOpenArgs を利用して渡しています。 OpenArgs は、フォームフィルターを反映したSQL文。 これで、レポートにはフォームフィルタが反映されます。 レポートで再フィルタするよりもネットワークトラフィックは混雑しないかと思います。
お礼
回答ありがとうございます。私には,難しくて意味が良く分からないところがありますが,これからもよろしくお願いいたします。
お礼
丁寧なご回答をありがとうございました。このとおりの記述をしたところ,できました!私のやり方では,よけいな記述をだらだらとしていたので,できなかったのでしょうか?また,質問の際には,よろしくお願いいたします。