• ベストアンサー

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を利用しようと考えた次第です。 >選択クエリーを読み込んで何をするか? が重要なところだと思いますが 今回の場合は単に抽出条件を指定して表示したいだけなのです。 よろしくお願いします。