- ベストアンサー
アクセスで
アクセスで、この様に上に検索する項目があり、下にその一覧が表示されます。この状態は、部署名を"1"で検索した状態で、部署"1"の担当者名と品名の一覧が表示されています。 この時に、担当者名の名前や品名をクリックすると、上の検索フォームの検索欄にその担当者名が入る様にできますか? 検索をする時に、例えば部署で検索し、その後、担当者名を見て、検索フォームに入力しという作業が面倒であり、品名は15文字以上になる事もあり、インターネットのホームページなどでこの様な物を見たことがあり、できれば便利です。コンボボックスに入力し、選ぶというのも考えましたが、できれば下の一覧からクリック一つで済む様にしたいです。 説明がへたくそですいません。誰か教えて頂けないでしょうか? よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
前提条件があまり分かりませんが、あるテーブルに「部署」「担当者名」「品名」があり、 フォームウィザードで表形式で作成されたものがベースであると仮定します。 ヘッダー部に「txt部署」「txt担当者名」「txt品名」名のテキストボックス、 および、条件クリア用のコマンドボタン「btn00」を配置したとします。 「部署」は、数値型と仮定します。 「txt部署」を直接入力するか、一覧内の「部署」をクリックすると、絞込み表示します。 タイミングは、「txt部署」の更新後処理になります。 一覧内の「部署」がクリックされた時に「txt部署」の更新後処理を走らせるために、 Me.txt部署.SetFocus Me.txt部署.Text = Me.部署 としています。 更新後処理を走らせる必要が無ければ、 Me.txt部署 = Me.部署 とし、SetFilter 関数を呼ぶのであれば、処理を追加します。 「txt担当者名」「txt品名」でも Filter 絞込み表示が必要なら、コメントを有効にします。 後は、条件クリアでどこまでをクリアするか等、工夫してください。 (「txt部署」はクリアしないとか) おかしな動きがあれば、ドンドン修正してください。 以下例) ' 表示フィルターの設定 Private Sub SetFilter() Dim sWhere As String Dim sAndOr As String sAndOr = " AND " sWhere = "" If (Not IsNull(Me.txt部署)) Then sWhere = sWhere & sAndOr & "([部署] = " & Me.txt部署 & ")" End If ' If (Not IsNull(Me.txt担当者名)) Then ' sWhere = sWhere & sAndOr & "([担当者名] = '" & Me.txt担当者名 & "')" ' End If ' If (Not IsNull(Me.txt品名)) Then ' sWhere = sWhere & sAndOr & "([品名] = '" & Me.txt品名 & "')" ' End If If (Len(sWhere) > 0) Then Me.Filter = Mid(sWhere, Len(sAndOr) + 1) Me.FilterOn = True Else Me.FilterOn = False Me.Filter = "" End If End Sub ' 初期状態 条件のクリア Private Sub Form_Load() Call btn00_Click End Sub ' 条件クリアのボタンが押されたら Private Sub btn00_Click() Me.txt部署 = Null Me.txt担当者名 = Null Me.txt品名 = Null Call SetFilter End Sub ' ヘッダー部に配置したテキストボックスの更新後処理 Private Sub txt部署_AfterUpdate() Call SetFilter End Sub Private Sub txt担当者名_AfterUpdate() ' Call SetFilter End Sub Private Sub txt品名_AfterUpdate() ' Call SetFilter End Sub ' マウスでクリックされたら Private Sub 部署_Click() Me.txt部署.SetFocus Me.txt部署.Text = Me.部署 End Sub Private Sub 担当者名_Click() Me.txt担当者名.SetFocus Me.txt担当者名.Text = Me.担当者名 End Sub Private Sub 品名_Click() Me.txt品名.SetFocus Me.txt品名.Text = Me.品名 End Sub
その他の回答 (1)
できますよ。 私がやるなら、一覧表の方の担当者名(あるいは品名)フィールドのクリックイベントを使います。 このフォームがどういう構成になるのかわからないので、具体的なコードは書きませんが、単に、上の担当者名(あるいは品名)フィールドに、ダブルクリックしたフィールドの値を代入するだけのコードです。
補足
フォームヘッダー部に"部署名"、"担当者名"、"品名"を入力するテキストボックスがあり、このテキストボックスがクエリAの抽出条件になっています。 フォーム詳細部にそのクエリAの結果が表示されます。 という形なのですが、詳細部の"担当者名"や"品名"をクリックすると、ヘッダー部のテキストボックスに値を代入するコードを教えて頂けませんか?よろしくお願いします。
お礼
丁寧な回答、大変ありがとうございます。 一度やってみます。