質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

1回答

399閲覧

Access フォーム内でいくつかの条件での検索について

MiECa

総合スコア7

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

1クリップ

投稿2018/02/21 12:29

編集2018/02/22 01:46

聞きたいこと
→accessで遷移先画面へのクエリの受け渡し?表示方法について。
→パラメータの入力ダイアログは出ないようにしても大丈夫なのか。

状況説明
→画面Xにコンボボックス1とテキストボックス2つがあり、実行btnをクリックすると「パラメータの入力」という画面が表示される。
→画面Yにデータを表示させたいのだが、肝心のクエリは動いていない(?)ため画面の見た目が真っ白。

以下は画面YのVBAで、画面読み込み時の処理↓

Private Sub Form_Load() Dim qd As QueryDef Set qd = CurrentDb.QueryDefs("クエリ1") With qd With CurrentDb.QueryDefs("クエリ1") 'テキストボックス1 If IsNull([Forms]![画面X]![画面X内のtxb1]) Then .Parameters("条件1") = "" Else .Parameters("条件1") = [Forms]![画面X]![画面X内のtxb1] 'テキストボックス2 If IsNull([Forms]![画面X]![画面X内のtxb2]) Then .Parameters("条件2") = "" Else .Parameters("条件2") = [Forms]![画面X]![画面X内のtxb2] 'コンボボックス If IsNull([Forms]![画面X]![画面X内のcmb]) Then .Parameters("PARAMT") = "" Else .Parameters("PARAMT") = [Forms]![画面X]![画面X内のcmb] End With End With End Sub

解決法がわかる方、もしくは検索方法がわかる方がいらっしゃいましたら教えていただけますと幸いです。
よろしくお願い致します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/02/21 15:15

パラメータの入力で求められる項目名を追記して下さい。
MiECa

2018/02/22 01:46

条件1、条件2、PARAMTの三つです。
guest

回答1

0

「画面Y」のレコードソースが「クエリ1」ということですね。

勘違いしているようですが、QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースのパラメータークエリにパラメータが設定されるわけではありません。宣言したQueryDefをOpenRecorsetしたときに開かれるレコードセットに適用されますが、フォームとは無関係です。

ご希望のことは、画面X の テキストボックスやコンボボックスにデータが未入力の時に、その条件は無視したいということだと推測しましたが、あってますか。だとしたら、レコードソースには抽出条件は設定せずに、開くときに、抽出条件(フィルター)を設定すればいいかと思います。

画面X の 実行btn のクリック時に下記のように記述してください。

vba

1Private Sub 実行btn_Click() 2 Dim strFilter As String 3 4 If Not IsNull(Me![画面X内のtxb1]) Then 5 strFilter = " AND フィールド1='" & Me![画面X内のtxb1] & "'" 6 End if 7 If Not IsNull(Me![画面X内のtxb2]) Then 8 strFilter = " AND フィールド2='" & Me![画面X内のtxb2] & "'" 9 End If 10 If Not IsNull(Me![[画面X内のcmb]) Then 11 strFilter = " AND フィールド3='" & Me![[画面X内のcmb] & "'" 12 End If 13 strFilter = Mid(strFilter, 6) '先頭の不要な" AND "を除去 14 Docmd.OpenForm "画面Y", , , strFilter 15 16End Sub

フィールド名や条件は実際のものに合わせて変更してください。


 誤解を招きかねない表現があったので、補足説明しておきます。
もし、QueryDef で開いたレコードセットをフォームのソースにしたい場合は、下記のようなコードになります。

vba

1Private Sub Form_Load() 2 Dim qd As DAO.QueryDef 3 Dim rs As DAO.Recordset 4 5 Set qd = CurrentDb.QueryDefs("クエリ1") 6 7 With qd 8 'テキストボックス1 9 .Parameters("条件1") = Nz([Forms]![画面X]![画面X内のtxb1],"") 10 'テキストボックス2 11 .Parameters("条件2") = Nz([Forms]![画面X]![画面X内のtxb2],"") 12 'コンボボックス 13 .Parameters("PARAMT") = Nz([Forms]![画面X]![画面X内のcmb],"") 14 Set rs = .OpenRecordset 'クエリからレコードセットを開く 15 Set Me.RecordSet = rs '開いたレコードセットをフォームのRecordSetプロパティに設定する 16 End With 17End Sub

この場合は、レコードソースは空白にしておく必要があります。すなわち、レコードソースと RecordSetプロパティは別物ということです。RecordSetプロパティに OpenRecordset で開いたレコードセットを設定することはできますが、いろいろ制限がありますので、メリットはほとんどないと思います。

投稿2018/02/22 03:52

編集2018/02/28 17:21
hatena19

総合スコア33715

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

sazi

2018/02/22 05:32

パラメータクエリをフォームのレコードセットとして指定できなかったんでしたっけ? 画面yのform_loadで行っているからタイミングが悪くて、btn_clickで行うことでも良い気がしますが。
hatena19

2018/02/22 06:11

できないことはないですが、いろいろ制限があるので一般的ではないと思います。抽出条件を動的に設定したい場合、Filterプロパティを使ったほうがシンプルだし自由度も高いので、そちらの方法を紹介しました。Docmd.OpenFormの引数で抽出条件を設定するとFilterプロパティにその条件が設定されます。
sazi

2018/02/22 06:22

私もパラメータクエリを使用する方では無いので、他の方法でというのは同意です。 >QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースにパラメータが設定されるわけではありません。 というのが、誤解を招く表現と感じたので、コメントしました。
sazi

2018/02/22 06:54

何度もすみません。言葉足らずでした。 レコードソースにパラメータクエリが設定されているとして、そのクエリーに対してパラメータは設定可能なので、「レコードソースにパラメータが設定されるわけではありません。」というのがレコードソースにパラメータクエリは使えないという風に解釈されるかもしれないという意味です。
hatena19

2018/02/22 08:37

回答では 「QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースにパラメータが設定されるわけではありません」と言ってます。これで、「レコードソースにパラメータクエリは使えない」と解釈されてもちょっと。
sazi

2018/02/22 14:17

レコードソースにパラメータなどは無いので、パラメータクエリーに対してと解釈してしまうかと思った次第。 汚してしまってすみません。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問