• 締切済み

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

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

みんなの回答

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

サブフォームコントロール名とサブフォームの関係について http://oshiete1.goo.ne.jp/qa4752536.html の#3を参照してみてください。 サブフォームコントロール名を使わない方法もありますが、わかりますでしょうか。 一応以下に1例を書いておきます。 (1)準備 標準モジュール先頭にグローバル変数を宣言 Public objFSUB As Object (2)サブフォーム起動時に自身を変数に代入&終了時に開放 サブフォームの「読み込み時」イベントで代入 Private Sub Form_Load()   Set objFSUB = Me End Sub サブフォームの「閉じる時」イベントで解放 Private Sub Form_Close()   Set objFSUB = Nothing End Sub (3)objFSUB を使用した設定等 objFSUB.Filter = "・・・・" objFSUB.FilterOn = True など、サブフォームに設定したいことは objFSUB を使用して設定/参照できます。 書き方は、サブフォーム内で、Me.xxxx と書くように、Me の部分を objFSUB に書き換えるだけです。 やりたい操作、記述をサブフォーム側で書いて、それをコピー、貼り付けし、 Me 部分を objFSUB に書き換えます。 ※この方法はサブフォームに限らず、フォーム間での設定/参照にも使用できます。

kami21
質問者

お礼

ご回答をありがとうございました。 Me.サブフォーム名.Form.Filter = "サブフォームにあるフィルタしたい部分の名前 Like '*" & Me.テキストボックス & "*'" 両方の名前は同じでしたので、記述はこれで合っていることがわかりましたが、フィルタは実現できませんでした。 サブフォームコントロール名を使わない方法というのは私の知識では理解できませんでした。 サブフォームになるだけで一気に難しくなるのですね。 何度もありがとうございました。

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

> フィルタリングできる方法 の基本は、フォームのレコードソースに指定したテーブル/クエリのフィールド名が、左側の記述になります。 例えば、「F1」というフィールド名に対して Me.Filter = "[F1] Like '*" & Me.テキストボックス1 & "*'" とか、 これを記述するのが、メイン(親)フォーム側であったら Me.FSUB.Form.Filter = "[F1] Like '*" & Me.テキストボックス & "*'" (FSUBは親フォームに配置したサブフォームコントロール名) 記述が子フォーム側であったら、 Me.Filter = "[F1] Like '*" & Me.Parent.テキストボックス & "*'" とか Me.Filter = "[F1] Like '*" & Forms!親フォーム名!テキストボックス & "*'" 元々子フォームのレコードソースに指定したクエリに、 [Forms]![親フォーム名]![テキストボックス] を用いた条件記述にしていた場合は、 Me.FSUB.Form.Requery とか Me.Requery で最新の表示にできます。 ※ テキストボックス1は、子フォーム側にあったとして   テキストボックスは、親フォーム側にあったとして ※ テキストボックスのところを、コンボボックスに変えても同様です。

kami21
質問者

お礼

ご回答をありがとうございました。 テキストボックスと検索ボタンはメインフォームにありますので、下記のように書いてみました。 しかし、反応はありませんでした。 Me.サブフォーム.Form.Filter = "サブフォームにあるフィルタしたい部分の名前 Like '*" & Me.テキストボックス & "*'" サブフォームコントロール名というのがサブフォーム!テキストボックスのようになるのかと思いやってみましたが、エラーになりました。 基本的なことがわかっていませんので実現できませんでした。 ありがとうございました。