2016-04-21 18 views
1

フォームに2つの依存コンボボックスを作成しました。最初のボックスでCategoryを選択すると、2番目に利用可能なProductsのリストがフィルタリングされます。 Category-Productの選択項目をTestというテーブルに保存しました。ここで、Categoriesはそれぞれ1行ずつ取得されます。Access 2013のRequeryコンボボックス

テストで既にカテゴリを選択している場合は、[製品]コンボボックスに製品を表示します。たとえば、フォームで[Category = Condiments]と[Product = Ketchup]を選択すると、Testに追加されます。次に、フォームでCategory = Condimentsを選択すると、Productsコンボボックス(ドロップダウンではなく、入力するボックス)ですぐにKetchupが表示されます。これは、テストで1つの行がある場合にのみ動作するようです。行を追加すると、ProductComboBoxは変更されません。

私のフォームがどのように構築されるのですか。 CategoryComboBoxための値集合ソースで

、IはProductComboBoxための値集合ソースで

Select * From CategoryTable 

すべてを選択し、私はカテゴリに基づいて製品をフィルタ形式のソースは製品カテゴリを接合残され

Select * From ProductTable Where ProductTable.CategoryID=[forms]![FormTest]![Category] 

を選択カテゴリIDでCategoryComboBoxためにChangeイベントで

とフォームの現在のイベントで、私はProductComboBox

ProductComboBox.Requery 

を再クエリしかし、ProductComboBox.Requeryを使用するだけのドロップダウンで使用可能なオプションを再クエリ。 Categoryを選択した後で、Productを選択する前に、現在のコンボボックスの値は変更されません。 ControlSourceにリンクされたテーブルからデータを再クエリするにはどうすればよいですか? Requeryよりも優れたVBA機能がありますか、またはマクロでSQLを使用する必要がありますか?最初のコンボボックスのOnChangeイベントイベントで

+0

まだドロップダウンボックスを使用してデータを入力する必要があることに注意してください。 – jjjjjjjjjjj

答えて

1

、次の手順を実行します。

Private Sub category_Change() 
     Dim myID As Long 
     Me.ProductComboBox.Requery 
     If Not IsNull(DLookup("ProductID", "tblTest", "CategoryID = " & me.Category)) Then 
      Me.ProductComboBox = DLookup("ProductID", "tblTest", "CategoryID = " & me.Category) 
     End If 
End Sub 

次に置く、あなたは「デフォルト」オプションを更新したい場合には、あなたのテストテーブルを更新する:

CurrentDb.Execute "UPDATE tblTest SET ProductID = " & Me.ProductComboBox & " WHERE CategoryID = " & Me.Category 

これは、 "tblTest"に既に各カテゴリのレコードがあることを前提としています。そうでない場合、いくつかのチェックを生成して、そのカテゴリをテーブルに挿入することができます。

+0

変更イベントにIfステートメントを追加すると、ありがとうございました。 – jjjjjjjjjjj

関連する問題