• ベストアンサー

AccessVBA RecordSourceのリセットについて

こんにちは。 フォーム上で、データベースを検索するものを作っています。 SELECT ~ WHERE ~ で条件に合致するレコードを、サブフォームを連続表示しています。 リセットボタンを作成して、検索結果を消したい(カラにしたい)と思うのですが、 Me![subform].Form.RecordSource = "" Me![subform].Requery 上記のVBAを実行すると、1レコードだけ表示され、コントロール上では「#Name?」が出てしまっています。 参照するテーブルが無いためにこういうことが起きているのだと思うのですが、防ぐ方法が分かりません。 教えてください。 宜しくお願いします。

  • jobvba
  • お礼率60% (166/274)

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

  • ベストアンサー
  • CHRONOS_0
  • ベストアンサー率54% (457/838)
回答No.2

ソースを空にしておいて再クエリなど出来ません >SELECT ~ WHERE ~ で条件に合致するレコードを 表示している時 >リセットボタンを作成して、検索結果を消したい(カラにしたい)と思うのですが、 こうしたければWhere条件を何も抽出しないものに変えます

jobvba
質問者

お礼

教えていただいた方法でやってみます! ありがとうございました!

その他の回答 (1)

noname#140971
noname#140971
回答No.1

tab1: ID_fld1 01_AAAA 02_BBBB 03_CCCC 04_DDDD ' ------------------------------ ' WHERE節で検索対象ゼロを指示 ' ------------------------------ Private Sub コマンド4_Click()     Me.RecordSource = "SELECT * FROM tab1 WHERE ID<1" End Sub ' ------------------------------ ' Filterで検索対象ゼロを指示 ' ------------------------------ Private Sub コマンド5_Click()     Me.FilterOn = False     Me.Filter = "ID<0"     Me.FilterOn = True End Sub ' ------------------------------ ' WHERE節で検索対象有りを指示 ' ------------------------------ Private Sub コマンド6_Click()     Me.RecordSource = "SELECT * FROM tab1 WHERE ID>1" End Sub レコードソースを空にしたらコントロールソースも空にしないとエラーが出るでしょう。 が、この場合は、復活のコードも必要となるのでややこしいと思います。 Private Sub コマンド7_Click()     Dim ctl As Control         For Each ctl In Me.Controls         If ctl.ControlType = acTextBox Then             ctl.ControlSource = ""         End If     Next     Me.RecordSource = "" End Sub

jobvba
質問者

お礼

勉強になります! ありがとうございました!

関連するQ&A

  • AccessVBA 並べ替えの条件

    こんにちは! sql_c = "SELECT * FROM [テーブル] ORDER BY [cnt] ASC" Me![subform].Form.RecordSource = sql_c Me![subform].Requery というVBAを書き込んだのですが、[cnt]フィールドはテキストフィールドであり、文字も数字も入ってるからだと思いますが、並べ替えがうまくいきません。 1,10,11,12,2,3,4・・・,V1,V10,V11,V2,V3・・・とった具合です。 文字が入るといっても、頭に「V」が付くか付かないかだけです。 きれいに並べるには、どのように書けばいいでしょうか?

  • 選択クエリーについて

    すでに出来上がっている選択クエリーを実行したときに、何レコード抽出されるか事前に知りたい場合、 DCountのような関数で知ることは可能でしょうか? Me![F_サブフォーム名].Form.RecordSource = "Q_クエリー名"のように、 サブフォームで明細を表示する前に、何件合致しましたという表示をさせたいのですが・・・。 (選択クエリーなので、テーブルを作成しているわけではありません。)

  • サブフォームに対してGoToRecordするには?

    フォームに対してRequeryすると先頭のレコードへ移動してしまうので Requeryする前のレコードの番号を取得して Requery後にそのレコード番号へ移動したいのですが Sub test() i = Forms("Form").Controls("SubForm").Form.CurrentRecord Forms("Form").Controls("SubForm").Requery DoCmd.GoToRecord acActiveDataObject, Forms("Form").Controls("SubForm"), acGoTo, i End Sub これをすると、実行時エラー2498 指定した式は、いずれかの引数とデータ型が対応していません。 になりますが、 どこがおかしいのでしょうか?

  • Access2007のサブフォームのRequeryで悩んでいます。。

    Access2007のサブフォームのRequeryで悩んでいます。。 Aメインフォーム Bサブフォーム埋め込みコントロール Cサブフォーム リストボックスう AにBを貼り付けBのソースオブジェクトにCを指定しています。 Cは帳票形式です リストボックスをクリックしたら、 CのRecordSourceにSQLを挿入し、 CをRequeryしていますが、全くRequery出来ていない模様なのです。。 B.SourceObject="C"も試したのですが、全く思った通りのデータが抽出されません。 B.Form.Requery Me.B.Form.Requery どれも試して駄目でした。 CのRecordSourceに直接SQLを貼り付けたら思った通りに出ますが、 Requeryが機能していない気がします。 実行結果は、数件対象データはあるのに、Cの中身は空になります。。。 正しくRequeryする方法、もしくは違うやり方があればご教授頂けないでしょうか?

  • AccessVBAコードの間違いを指摘してください

    Microsoft Accessでデータベースを作っています。テーブル「駅時刻リスト」「列車リスト」クエリ「クエリ1」フォーム「一列車フォーム」「サブフォーム」を作りました。「一列車フォーム」から列車コードを選択すると「サブフォーム」の列車が列車コードで絞り込まれるようにするコードを書きました。間違いを指摘してください。 Private Sub 列車コード_AfterUpdate() Me!サブフォーム.Form.Filter = "列車コード like '*' & [Forms]![一列車フォーム]![列車コード] & '*'" Me!サブフォーム.Form.FilterOn = True DoCmd.Requery End Sub

  • AccessVBA ControlSourceのデータについて

    こんにちは。 サブフォームを連続表示させているフォームがあって、 Me.RecordSourceに指定したSQLでデータを取ってきています。 Me[テキストボックス]には0か-1のどちらかしか入ってきません。 やりたいことは、0が入ってきた場合は「文字A」を表示し、-1が入ってきた場合は「文字B」を表示する、ということです。 そういったことは出来るのでしょうか?

  • 【ACCESS2003】サブフォーム名を変数に入れたい

    ACCESS2003で開発しています。 ひとつのフォーム(Form1)にサブフォームを10個(SubForm01からSubForm10まで)配置しており、そのフォーム内のボタンで1つのサブフォームを切り替え表示するようにしています。 サブフォーム部分だけがページ遷移しているように見えるような感じのことしたいので、こんな面倒なことをやっています。 各サブフォームの処理は全く一緒なのですが、サブフォームが10個もある為に同じ処理をForm1に10まとまり書かないといけないので、サブフォームの名前を変数にできないかなと考えていますがやり方がわかりません。 下記ソースで色々試してみたのですが、だめでした。 具体的にはサブフォーム(SubForm01~SubForm10まで)のテキストボックス(txtBox1~txtBox30)に順に値を入れたいということです。 教えてください。 Dim strPageCnt As String 'サブフォームの番号 '(処理省略)ここでstrPageCntに01から10までのいずれかの値を放り込んでいます。 For i = 1 To rs.RecordCount 'レコードセット最大値までループ '↓ここでサブフォーム名を変数に入れる    strSubForm = frmLOT31010_SubForm & strPageCnt '↓この方法もだめ    Forms!Form1!strSubForm!txtBox(i).Value = rs("NO").Value    '↓この方法もだめ    Forms!Form1!SubForm("strPageCnt")!txtBox(i).Value = rs("NO").Value '↓これもだめ    Forms!Form1!SubForm(strPageCnt)!txtBox(i).Enable = False    '↓これもだめ Forms!Form1!SubForm(strPageCnt)!txtBox(i + 1).SetFocus next どのようにすればサブフォームの名前を変数に入れて、なおかつサブフォーム名を可変にし(ここで言うところのサブフォームの最後の数値を変えて)サブフォームが扱えるようになりますか? 教えてください。よろしくお願いいたします。

  • accessVBA 「フォームが見つかりません」

    コードをいろいろいじっていたら「F仕分伝票というフォームは見つかりません」というメッセージが出るようになりました。 Me.RecordSource = "SELECT * FROM 仕分伝票 WHERE 伝票番号 = " & Forms!F仕分伝票![伝票番号] & ";" このようなメッセージはどのような原因が多いのでしょうか。

  • access、検査の結果表示のサブフォーム、条件によって色を変更

    テーブルは、「T_メイン」 フォームで「F_検索条件入力」と「F_メイン検索結果一覧」があり、 それぞれ元テーブルはなく、 F_検索条件入力は検索条件を入れるだけのフォームをデザインから作成。 その中の検索ボタンを押すと、 Me![F_sub].Form.RecordSource = "SELECT * FROM [T_メイン] where Forms![F_検索条件入力]![検索条件] = [T_メイン]![フィールド1]" Me.Requery のような感じになっております。 上記の結果が、F_検索条件入力の中にあるサブフォーム「F_検索結果一覧」が表示されます。 検索結果を出した「F_検索結果一覧」の数値を元にフォントに色を変えたいです。 複数件数の検索結果がある場合、一番最初のレコードのデータをもとにすべての色が変わってしまっています。 今は「読み込み時」にVBAがはいっています。 「レコード移動時」にいれてみたが、レコードをクリックすると、今度は次のレコードの値を元にした条件ですべてのレコードの色がかわってしまうんです。 1件ずつそれぞれのデータをもとに色がかわるようにするにはどうしたらいいですか?

  • ボタン押下でサブフォームのレコードソースを変更

    ボタン押下でサブフォームのレコードソースを変更 する方法を探しています。 元とするテーブルは同じですが、拾うべきフィールドが全く異なるため2つのクエリを作成しました。 元テーブル「メンバー一覧」 クエリ「q_1組のみ」「q_女性のみ」 フォームヘッダーにコンボボックスでどちらかのクエリを選択し、ボタンを押したら サブフォームが表示されるようにしたいのですが、 現在のところ、「閉じているかまたは存在しないオブジェクトを参照」というエラーが出てしまっています。 Me.でもForms("検索ウィンドウ").でも結果は同じでした。 ソースはクエリを指定しています。 Access2007 --------------------------------- Private Sub 検索ボタン_Click() If [Forms]![検索ウィンドウ]![申込形態] = "1組のみ" Then Me.検索結果サブフォーム.Form.RecordSource = "q_しぼりこみ1" Else Forms("検索ウィンドウ").検索結果サブフォーム.Form.RecordSource = "q_しぼりこみ2" End If

専門家に質問してみよう