• ベストアンサー

アクセスで

アクセスで、この様に上に検索する項目があり、下にその一覧が表示されます。この状態は、部署名を"1"で検索した状態で、部署"1"の担当者名と品名の一覧が表示されています。 この時に、担当者名の名前や品名をクリックすると、上の検索フォームの検索欄にその担当者名が入る様にできますか? 検索をする時に、例えば部署で検索し、その後、担当者名を見て、検索フォームに入力しという作業が面倒であり、品名は15文字以上になる事もあり、インターネットのホームページなどでこの様な物を見たことがあり、できれば便利です。コンボボックスに入力し、選ぶというのも考えましたが、できれば下の一覧からクリック一つで済む様にしたいです。 説明がへたくそですいません。誰か教えて頂けないでしょうか? よろしくお願いします。

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

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.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

doradora64
質問者

お礼

丁寧な回答、大変ありがとうございます。 一度やってみます。

その他の回答 (1)

noname#110201
noname#110201
回答No.1

できますよ。 私がやるなら、一覧表の方の担当者名(あるいは品名)フィールドのクリックイベントを使います。 このフォームがどういう構成になるのかわからないので、具体的なコードは書きませんが、単に、上の担当者名(あるいは品名)フィールドに、ダブルクリックしたフィールドの値を代入するだけのコードです。

doradora64
質問者

補足

フォームヘッダー部に"部署名"、"担当者名"、"品名"を入力するテキストボックスがあり、このテキストボックスがクエリAの抽出条件になっています。 フォーム詳細部にそのクエリAの結果が表示されます。 という形なのですが、詳細部の"担当者名"や"品名"をクリックすると、ヘッダー部のテキストボックスに値を代入するコードを教えて頂けませんか?よろしくお願いします。

関連するQ&A

専門家に質問してみよう