• ベストアンサー

ACCESSでVBAから選択クエリの抽出条件を指定したい

選択クエリの抽出条件はデザインビューの「抽出条件」欄に直接条件式を書き込むのが普通だと思いますが、この条件式をVBAで記述することは出来るでしょうか? DoCmd.RunSQL ではアクションクエリしか実行できないようだし、 DoCmsOpenQuery では引数に抽出条件を指定することが出来ないし困っています。

質問者が選んだベストアンサー

  • ベストアンサー
noname#6392
noname#6392
回答No.3

おつかれさま~(^_^) 惜しいですね! もう少しですね さてさて、明日出張なので今日はたぶん最後のレスになってしまいますが、 ちなみに明日は返答できないのであしからず。。。 > Forms("サブフォーム").RecordSource = strSQL 駄目でしたか。。。 もし私が記載した内容で埋め込みのサブフォームを 利用しているのであれば 自分を参照する為に「Me」を使って Me.埋め込みフォーム.Form.RecordSource = StrSQL Me.埋め込みフォーム.Requery に変更すれば動くと強く思います。 # 念じてます(^^) ちなみに、 Me. と打ち込んだ時点でオートコンプリート(名称あってるかな~) 機能が働いて参照できるオブジェクトが表示される はずです。 その中にKojiさんが書いた埋め込みオブジェクトが きっとあるはず もしかすると"FormA"とか名前を付けたつもりでも Visual Basic Editor君が気を利かせて Form_formA とかになってる場合があります。 最近やってないんでうろ覚えなんですが、こんな処を注意すれば大丈夫! 追伸 このコードって検索とかで使えますから 覚えておくときっと役に立ちますよ♪

k_o_j_i
質問者

お礼

ありがとうございます。 >Me.埋め込みフォーム.Form.RecordSource = StrSQL >Me.埋め込みフォーム.Requery ばっちり正常に機能しました。 感激です! >覚えておくときっと役に立ちますよ♪ とりあえず自作テンプレート集に収録しておきました。(^v^)

その他の回答 (2)

noname#6392
noname#6392
回答No.2

こんにちは(^^) >> 選択クエリーを読み込んで何をするか? が重要なところだと思いますが > 今回の場合は単に抽出条件を指定して表示したいだけなのです。 この場合単に表示するという記載ですが 「指定したフォームのレコードソースに指定した選択クエリーを入れてあげる」 という事だと思います。たぶん... > この文字列を選択クエリを開くときの条件として指定したいのです。 実際にはVBAで処理をするという事なので こんなフォームが欲しいのではないでしょうか? 親フォームにテキストボックス2ヶとコマンドボタンを配置する。 たとえば名称は下記と仮定する。 Text1 Text2 Commnd1 サブフォームに選択クエリーを表示する表を配置する。 サブフォームのレコードソースは適当な物にしておく。 (たとえば日付で選択していない物など) コマンドボタンクリックイベントにコードを書き込む Dim StrSQL as String 'SQL文を代入する dim Dtm1 , Dtm2 as Date '日付を入れる dim Str1 , Str2 as String Date型で入力されているかのエラーチェックをしておく。 IsNull 関数あたりで IF 文あたりで行う。 dtm1 = Txet1 dtm2 = Txet2 「Text1 < Text2」 の条件になるかどうかのエラーチェック SQLは文字列しか使えないので、日付型からFormat関数あたりで 文字列に変更し各 Str1 , Str2 に代入する。 この辺りはヘルプを参照してください。 StrSQL = "選択クエリーをカットアンドペーストで入れる" StrSQL = StrSQL & "長いようだったらわけて見やすく" StrSQL = StrSQL & "日付の前まで入れてあげる" StrSQL = StrSQL & Str1 'ここで"2002/4/1"みたいな物を代入する事に StrSQL = StrSQL & "# and < #" StrSQL = StrSQL & Str2 'ここの説明は同様 StrSQL = StrSQL & "最後の文章" これでSQL文が完成するので サブフォーム名.レコードソース = StrSQL ( ↑日曜日なのでスペルは思い出せない...) あたりで代入すればOKのはずですが... あ、最後にサブフォームをリクエリーすれば完成じゃないでしょうか? どうでしょう! 要するに文字列に無理やり入れてやる作業をすれば宜しいという事で 回答になってはおりませんでしょうか? これでだめなら、選択クエリーをSQLビューでカット&ペーストしてUPして ください。 それではうまく行くといいですね♪ 脳内活動が日曜日モードに入っているので、この程度しか回答できないのですが テキストエディターで書いたので、間違いがあったら適当に直してください。

k_o_j_i
質問者

補足

詳説ありがとうごっざいます。 テストファイルを作り実行してみましたが、 サブフォーム名.レコードソース = StrSQL のところが問題です。 「VBAコードで参照されている“サブフォーム”フォームが見つかりません」 とエラーが出て止まってしまいます。 実際には Forms("サブフォーム").RecordSource = strSQL と記述しました。 何がいけないのでしょうか・・・

noname#6392
noname#6392
回答No.1

思わずできますよ!と書いてしまいましたが よく読んでみると駄目ですね(^_^) 実際なにをしたいんですか? 抽出するだけじゃ意味ないですよね~ 抽出してなにかするという記述が無いと意味が。。。 抽出した物をカウントするとか テーブルを作成するとか追加するとか (Count だったらヘルプをみればきっと解決しますよ) 選択クエリーを読み込んで何をするか? が重要なところだと思いますが 改めて検討してみてください。 ではでは

k_o_j_i
質問者

補足

>実際なにをしたいんですか? 「0203」など年号2桁+月2桁の文字列から "> #2002/3/1# and < #2002/4/1#"といった抽出条件を算出し この文字列を選択クエリを開くときの条件として指定したいのです。 デザインビューの抽出欄だけでこの処理をするのは難しいと思ったので、 VBAを利用しようと考えた次第です。 >選択クエリーを読み込んで何をするか? が重要なところだと思いますが 今回の場合は単に抽出条件を指定して表示したいだけなのです。 よろしくお願いします。

関連するQ&A

  • Access2000:クエリに値(抽出条件値)を返す

    クエリに抽出条件として、 Between [いつから?(例:200504)] And [いつまで?(例:200504)] と指定してあります。 マクロに登録されたクエリを実行すると必要パラメータとしてダイアログがたちあがるものです。 これを自動的にVBAで日付を算出し、上記クエリに値を返すことをしたいのですが記述方法がわかりません。 VBAで作成した関数の戻り値を上記クエリの抽出条件の欄に返す方法はありますか? よろしくお願いいたします。

  • ACCESS クエリの抽出条件

    毎度お世話になります。 クエリをレコードソースとするフォームから、コマンドボタンでアクションクエリを実行するときの抽出条件の書き方を教えて頂けないでしょうか? 二つのテーブル(別のACCESSファイルからリンク)を基にパラメータクエリを作っています。 そのクエリを基にフォームを作っています。 さらに、そのフォームに追加クエリを実行するボタンを置いています。 フォームに表示してあるレコードだけ(パラメータで抽出されたレコードだけ)、他のテーブルに追加しようと思っているのですが、実行ボタンを押すともう一度パラメータが出てきてしまいます。 多分テキストボックスの値を読み取る際にレコードソースがテーブルでないのが問題じゃないかと思うのですが。。。 テーブル:Container / Items クエリ:From_Con(パラメータは[Container]フィールド) フォーム:From_Con(テキストボックス名は[txtContainer]) 追加クエリ:From_Con_App(抽出条件は[Forms]![From_Con]![txtContainer]としてみたがうまく動きません。) デザインビューの抽出条件を使う方法? SQLを使う方法? QueryDefを使う方法? いろいろありそうですが、ネットで検索してもヒットしません。 分かりにくい説明で申し訳ありませんがご教授願います。

  • ACCESS 選択クエリでの抽出条件について

    在庫マスターと得意先マスターのテーブルを使用して 在庫マスターのデータを抽出条件により出力したいと思っています。 在庫マスターは区分コード1の倉庫コードと区分コード3の店舗コードと分かれており、 抽出条件は区分コード1の時は倉庫コード199と155は除きます。 区分コード2の時は得意先マスターの形態コードから"1"と"2"のものを抽出します。 デザインビューでクエリ作成するで選択クエリから抽出条件を入力してデータを出力できないのでしょうか。 色々と試していますがエラーが表示され出力できません。 例) If([ST_WHTYPE]="1",([dbo_STOCK].[ST_WHNO]) Not In ("199","155"), IIf([ST_WHTYPE]="3",[CU_SHOPTYPE]="1" Or [CU_SHOPTYPE]="2")) この場合は集計関数・・・・・含んでないクエリーを実行しましたと表示されます。 他には複雑すぎるため評価できませんとかエラーが表示されます。 選択クエリでの抽出条件ではできないのでしょうか。

  • Access選択クエリの並び替え

    選択クエリにて抽出条件を指定した後、並び替えを行いましたところ、デザインビューのフィールドが並び替えの条件のみの表示になり、抽出条件を確認出来ません。 再度、抽出条件を確認・変更するにはどうすればよいのでしょうか? 宜しくお願いします。

  • クエリのフィールド欄に作成した項目を抽出条件で利用するには?(Access2000)

    Accsess2000、クエリについての質問です。 新規のクエリをデザインビューで開き、フィールド欄に、hoge:50 と入力します。シートビューにすると、hogeフィールドには50と表示されています。 デザインビューに戻り、新たなフィールド欄に 加算:[hoge]+100 と入力します。シートビューにすると、加算フィールドには150と表示されています。 以上のように、[hoge]という項目は他のフィールド欄でも利用できることがわかりました。 しかし、[hoge]を抽出条件欄で用いようとすると、パラメータの入力を求められてしまいます。 (例えば、[金額]フィールドの抽出条件に >[hoge] と設定するなど) 質問内容は、[hoge]を抽出条件で利用するにはどのようにすればよいか、というものです。 以上、よろしくお願い致します。

  • accessクエリの抽出条件

    access初心者です。 フィールド:「年」 数値型 フィールド:「月」 数値型 があり クエリの抽出条件に 年:2001 月:11 でクエリが実行できます。 これを当月分をクエリ実行できるように 年:year(date()) 月:month(date()) のように入れて当月のレコードを抽出したいのですが 「式に未定義関数dateがあります」というメッセージが出ます。どこが間違っているか助言をいただけると助かります。

  • ACCESS2010テキストボックス値を抽出条件に

    ACCESS2010にて、フォームに作ったテキストボックスの入力値(数字3桁)をクエリの抽出条件にしたいと考えています。 ただ、そのテキストボックスの数が30個の為、クエリデザイン画面の抽出条件欄にorを用いた条件式で設定することが出来ませんでした。(文字数上限超?) そこで、VBAを用いて抽出条件を設定しようと考えているのですが、初心者のため全く勝手が分かりません。VBAでの設定方法やVBA以外での抽出方法があれば教えて頂けないでしょうか。 尚、テキストボックスには商品コード(数字3桁)を入力し、売上データを集計したクエリにおいて、フォームのテキストボックスに入力された複数の商品コードを抽出条件に設定したいと考えております。 以上、どうかお願い致します。

  • ACCESS 選択クエリーの抽出条件について

    既出でしたら、大変申し訳ありません。 選択クエリーの抽出条件をフォーム上テキストボックスに入力した 値で行いたいと思います。 対象の項目は商品コードであり、テキスト型です。 フォーム上のテキストボックスに、1111 と入力し、 クエリーの実行をしたところ、正常に抽出。 しかし、フォーム上のテキストボックスに、"1111" or "2222"と 複数の商品を抽出したいので入力した場合、結果が出ませんでした。 おそらく、"1111" or "2222"の記述に問題があるのだと思い、 何パタンか挑戦しましたが、結果バツ。 どなたかお分かりになる方いらっしゃいますか? つたない文章で申し訳ありません。

  • Accessのクエリのデータ抽出のエラー?について

    お世話になります。 Accessのクエリでのデータ抽出について教えてください。 テーブルからフィールドを商品コードと出荷日の2つを選択し、 集計を使用して、商品コードでグループ化して、出荷日で最大にします。 すると、抽出条件で商品コードを指定すると抽出できるのですが、抽出条件で 指定せずすべてのデータを抽出すると出てこない商品コードがあります。 たとえば[A]という商品コードを抽出条件に指定すると抽出できるのですが、 抽出条件で指定せずすべてのデータを抽出するとこの[A]という商品コードが 抽出されません。 何が理由なのかお分かりになりましたらどうぞよろしくお願いいたします。 当方SQLがわかりませんのでクエリのデザインビューでご説明いただけますと 幸いです。

  • [Access]クエリの抽出条件について

    アクセス初心者です。よろしくお願いします。 クエリの抽出条件に別テーブルのフィールドをあいまい検索で入れたいのですが方法がわかりません。 データシートビューには検索したいテーブル(tbl_1)と 検索する文字列が入ったテーブル(tbl_2)の2つを表示させています。 デザイングリッドは検索したいフィールドを表示し、 抽出条件にLike "*[tbl_2]![フィールド名]*"と入れましたが該当するものがあっても表示されないのです。 どうしたらよいでしょうか。ご伝授ください。

専門家に質問してみよう