Accessのフィルター機能について質問です。

このQ&Aのポイント
  • 検索フォームから主フォームに反映させるコードとは
  • 主フォームの検索結果をサブフォームに影響させない方法は
  • 主フォームのレコードが変わっても、サブフォームを新規登録状態にする方法は
回答を見る
  • ベストアンサー

Accessのフィルター機能について質問です。

こんにちは。 以前に http://okwave.jp/qa/q7072953.html で「別フォームから主フォームに反映」という質問をさせていただいた者です。 「  With Forms("F01-1")     .Filter = "顧客コード = " & Me!顧客コード     .FilterOn = True   End With  」 というコードを検索フォーム(別フォーム)に記入することにより、 主フォーム上に検索フォームで選択したものが表示されるようになりました。 ※検索フォームにおけるデータの追加・変更・削除等は行えません。 上の質問での設定を前提で質問なのですが、どうかどなたかお答えください。 検索フォームから主フォームに、絞り込み検索が行えるようになったのですが、 主フォームの検索結果を(主フォーム上の)サブフォームに影響させないようにするには どうしたら良いのでしょうか? 主フォームのレコードが変わっても、サブフォームは常に新規登録状態にしておきたい ということです。 説明が足りないところもあるかと思いますが、よろしくお願いいたします。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

> 主フォームのレコードが変わっても、サブフォームは常に新規登録状態 ということは、 サブフォームはデザインで「データ入力用」が「はい」となっているのでしょうか。 (主フォームと関連するレコードがあっても表示せず、新規行のみにしておきたい?) 2010 は持っていないので、2007 での動きになるのですが・・・・   With Forms("F01-1")     .Filter = "顧客コード = " & Me!顧客コード     .FilterOn = True   End With と主フォームの FilterOn を設定すると、サブフォームの DataEntry が False に 自動変更され、既存のレコードが表示されます。 その後、サブフォームを DataEntry = True しても、Filter のかかった主フォームの 「レコード移動」直前に DataEntry = False に変更設定される動きのようです。 ※ このことを言われているのでしょうか?  以下はそうだとして 機械翻訳で読みにくいのですが、「仕様」っぽい事が書いてあります。 ACC2000: フォームまたは選択範囲の変更フォームの"DataEntry/データ入力用"プロパティでフィルターを適用します。 http://support.microsoft.com/kb/198948/ja Filter にこだわってみると、 主フォームの「レコード移動時」サブフォームを DataEntry = True に都度設定します。 サブフォームコントロール名を「FSUB」と仮定すると Private Sub Form_Current()   Me.FSUB.Form.DataEntry = True End Sub ただ、この場合チラつきます。 もう Filter は使わずに、主フォームのレコードソースを直接書き換える・・・・ (サブフォームの「データ入力用」を「はい」として使いたい場合) Forms("F01-1").RecordSource = _      "SELECT T03.商品コード, T03.日付, T03.顧客コード," _     & " T01.会社名, T01.住所, T01.電話番号 FROM T03 INNER JOIN T01" _     & " ON T03.顧客コード = T01.顧客コード" _     & " WHERE T03.顧客コード = " & Me!顧客コード & ";" のような感じで、WHERE 条件に 顧客コードを記述したものを設定します。 ※ 上記のSQLは雰囲気で書いたので正式なものにしてください。   (この時にはレコード移動時は昔のままで) ※ レコードソースを書き換えるのが嫌だったら、チョッと工夫します。 元々のレコードソースには、主フォームヘッダ部に非表示で配置したテキストボックスを 条件として参照するようにしておきます。 非表示のテキストボックス名を「検索用顧客コード」と仮定した場合、 レコードソースは SELECT ・・・・・ WHERE T03.顧客コード = Nz([Forms]![F01-1]![検索用顧客コード],0); とか・・・ で、検索フォームでは、そのテキストボックスに顧客コードを設定し、 主フォームを Requery します。   With Forms("F01-1")     .検索用顧客コード = Me!顧客コード     .Requery   End With ※ チョッと、視点を変えた方法として(主フォームのレコードソースはそのままで) サブフォームのレコードソースの抽出条件にありえないものを記述しておきます。 (サブフォームの「データ入力用」は「はい/いいえ」どちらでも) 表示するものが1つもないので、新規登録部分しか表示されないと思います。 例えば、 SELECT * FROM T02 WHERE コード = 0; 「コード」はオートナンバでしたよね。多分 0 は使っていないと思うので、 (動いたという検索フォームでの Filter 設定部分はそのまま使います) ※ 解釈が違っていた等々・・・・補足してください。  (補足いただいても、わからないかもしれません) ※ サブフォームは帳票で良いのでしょうか(画像からはデータシートに見えなくも)

nmt3942
質問者

お礼

いつもありがとうございます!!!! どなたからもお返事がないので無理なのかなぁと半分諦めておりました。 他力本願な自分もいけないのですが… ですが、まさか30246kiku様にお返事いただけるとは思いもよらず、 とても嬉しかったです! そして的確なアドバイスの結果、できました! サブ、メインとともに「データ入力用」は「はい」になっています。 フィルターにこだわり、サブフォームのDataEntry = Trueの方法で やってみたところすんなりできました。 これを応用したいデータは画面を変える(動かす等)ことがないので、 チラつきを気にすることがないので、こちらで十分対応できました! 他に提示していただいた2つも試してみたいと思います。 本当にいつもありがとうございます。 文句なくベストアンサーです(^^) 蛇足ですが… 2010に代わってあまりにも様式が変わっていて戸惑うことばかりです笑 マウスホイールができないことやすでにシマシマフォームであることも 便利になったなぁと感心する一方でした。 また一から学びなおし頑張ります!

関連するQ&A

  • 複数の条件で検索したい!

    複数の条件で検索したい! 現在下記のコードでフォームのtxtBoxとcmbBoxの条件でサブフォームを絞込みしています。 これを複数の条件を満たしたレコードだけを絞込みしたいのですが、 txtBox1の条件も拾うしcmb1の条件も拾ってしまう・・・ これを txtBox1の条件を満たした中のcmb1条件も満たすのレコードで絞込みしたいのですが、 どのようにしたら良いか教えてください。よろしくお願いいたします。 Private Sub cmd検索_Click() If Not IsNull(txtBox1) Then サブフォーム.Form.Filter = "顧客コード like '*" & txtBox1.Value & "'" サブフォーム.Form.FilterOn = True End If If Not IsNull(cmb1) Then サブフォーム.Form.Filter = "顧客区分 like '" & cmb1.Value & "'" サブフォーム.Form.FilterOn = True End If If Not IsNull(txtBox2) Then サブフォーム.Form.Filter = "顧客名カナ like '*" & txtBox2.Value & "*'" サブフォーム.Form.FilterOn = True End If

  • Access VBA フィルター

    Microsoft Access のVBAで、メインフォームで条件を設定するとサブフォームがフィルターされて開くというVBAを作っています。 SQL文を「SQLCode」という文字列型変数に入れました。 具体的には以下の内容がSQLCodeに入っています。 [担当者]=[Forms]![検索]![担当者] この変数をフォームにフィルターをかけて開くコードに入れたいのですが、以下の?の部分を教えてください。 Me!Fサブフォーム.Form.Filter. = ? Me!Fサブフォーム.Form.FilterOn = True

  • サブフォームにフィルタをかけたい

    サブフォームにフィルタをかけたいのですが エラーになってしまいます。 下記がエラー内容です。 ---------------------------------------------------------- 実行時エラー 438 オブジェクトは、このプロパティまたはメソッドをサポートしていません。 ---------------------------------------------------------- 細かい概要は テーブル1にフィールドがあり、 レコードには「あああ」と入力されています。 テーブル1がレコードソースとされている「フォーム(2)」をサブフォームとして 親フォーム(フォーム名:フォーム(1))に乗せました。 フォーム(1)を開いた時にフォーム(2)にフィルタをかけたいのですが うまくいきません。 オブジェクト名にカッコを付けているため、 Form_フォーム・・・・ というコードは書けないので ---------------------------------------------------------- Private Sub Form_Open(Cancel As Integer) Forms("フォーム(1)").Controls("フォーム(2)").Form.Filter = "フィールド = '" & "*あ*" & "'" Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True End Sub ---------------------------------------------------------- としています。 Forms("フォーム(1)").Controls("フォーム(2)").FilterOn = True でエラーになりますが、 この行をなくしたら、フィルタがかかりません。 どうすればサブフォームにフィルタをかける事が出来るのでしょうか? ご教示よろしくお願い致します。

  • 複数の条件を満たすレコード検索教えてください!

    複数の条件を満たすレコード検索教えてください! 現在フォームのコマンドボタンでサブフォームの絞込みを下記のコードで行っています・・・が、 ”顧客コード”と”顧客名”を同時に入力して検索すると”顧客コード”を無視して”顧客名”だけを 検索してしまいます、複数の条件を全て満たすにはどうすれば良いか教えてください。 よろしくお願いいたします。 Private Sub cmd検索_Click() If Not IsNull(txt顧客コード) Then S顧客.Form.Filter = "顧客コード like '" & txt顧客コード.Value & "'" S顧客.Form.FilterOn = True End If If Not IsNull(cmb顧客区分) Then S顧客.Form.Filter = "顧客区分 like '" & cmb顧客区分.Value & "'" S顧客.Form.FilterOn = True End If If Not IsNull(txt顧客名) Then S顧客.Form.Filter = "顧客名カナ like '*" & txt顧客名.Value & "*'" S顧客.Form.FilterOn = True End If

  • 複数条件のフィルタができない

    マイクロソフトアクセスです。 アクセスで親フォームからサブフォームへフィルタをかけたいのですが Sub フィルタ() With Forms("F_親フォーム").Controls("SF").Form .Filter = "カテゴリ like'" & Forms("F_親フォーム").Controls("cmd_カテゴリ").Value & "' and " _ & "施設名 like '" & Forms("F_親フォーム").Controls("txt_施設名").Value & "'" .FilterOn = True End With End Sub だとうまくできません。 With Forms("F_親フォーム").Controls("SF").Form .Filter = "カテゴリ like'" & Forms("F_親フォーム").Controls("cmd_カテゴリ").Value & "' or " _ & "施設名 like '" & Forms("F_親フォーム").Controls("txt_施設名").Value & "'" .FilterOn = True End With これならフィルタされるのですが、 どちらかだけになってしまいます。 .Filter = "カテゴリ like'" & Forms("F_親フォーム").Controls("cmd_カテゴリ").Value & "' and " _ & "施設名 like '" & Forms("F_親フォーム").Controls("txt_施設名").Value & "'" の文法がおかしいのだと思うのですが、どこが変ですか?

  • Access2007 サブフォームでフィルタリングする方法

    お世話になっております。 フォーム上に関連性のないサブフォームがあります。 フォームのコンボボックスでデータを選び検索ボタンをクリックすると、サブフォームのフィールドがコンボボックスのデータで抽出できるようにしたいと思います。 このように書いてみましたが、検索ボタンをクリックするとサブフォームの全てのデータが消えてしまい、実現できませんでした。 Me.FilterOn = True Me.Filter = "(Forms!フォーム!サブフォーム1!コンボ Like '*" & Me.フィールド & "*')" サブフォームでフィルタリングできる方法を教えていただければ幸いです。 よろしくお願いいたします。

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

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

  • Access 2003 でフォームフィルターがかかりません。

    Access 2003 でフォームフィルターがかかりません。 どなたか助けてください。 アクセス初心者です。 フォームの詳細欄にチェックボックス(フィールド名:伝票チェック)を配置しております。 チェックの入っていないものを表示させたいです。 フォームヘッダーのオプショングループ(フレーム67)に オプションボタン0-オプション値0と オプションボタン2-オプション値2 の2個のオプションボタンを配置してあります。 クリック時のイベントプロシージャに以下のコードを書きました。 Private Sub フレーム67_Click() If Me!フレーム67 = 0 Then Me.Filter = 伝票チェック = 0 Me.FilterOn = True Else Me.Filter = "" Me.FilterOn = True End If End Sub 実行時エラーは出ませんが、データが何も表示されません。 どうすればいいのでしょう??? どなたかお願いします。

  • Accessのフィルタについて

    Access2000を使っています。 フォームに配置した「TextBox1」と「TextBox2」(両者とも日付/時刻型)を引数として指定範囲の抽出をすべく Me.Filter="検索結果 Between #"& TextBox1 &"# And #"& TextBox2 &"#" Me.FilterOn=True (「検索結果」はテーブルに配置したフィールドに連結) のコードをボタンのクリックイベントに設定しました。 ところが、例えば「TextBox1」に「01/02/03」、また、「TextBox2」に「01/05/04」を入力して、ボタンをクリックしても抽出されません。 フォームに戻って、フォームのプロパティで確認するとフィルタの欄に 「検索結果 Between #01/02/03# And #01/05/04#」と表示されておりコードに間違いはないと思われますが、フォームフィルタをかけてみると、検索結果のテキストボックスに「Between #03/01/02# And #04/01/05#」という具合に日付が「日/年/月」に置き変わって表示されています。これがコードを実行しても抽出されない原因だと思われるのですか、何故、このように日付が変わってしまうのでしょうか。また、どうすれば変わらないようにできるのでしょうか。 よろしくお願いします。

  • サブフォームにデータが表示されない!

    サブフォームにデータが表示されない! フォーム(1)(非連結のtxt顧客コード) フォーム(1)にサブフォーム(2)(レコードソースはクエリ(3))を作り、 クエリ(3)顧客コードの抽出条件に[forms]![フォーム(1)].[form].[txt顧客コード]で選択しています。 フォーム(1)が開いた時にクエリ(3)は抽出しているのにそのデータがサブフォーム(2)に表示されません・・・ フォーム(1)を一度デザインビューにして開き直すとサブフォーム(2)に反映表示されます。 いろんな所にRequeryを入れたりしてみましたが、フォーム(1)を開いたときに一発で表示されません、教えてください!宜しくお願いいたします。

専門家に質問してみよう