我如何使用 Dlookup for Multiple Criteria 创建动态组合框

How do i use Dlookup for Multiple Criteria to create a dynamic Combobox

我有两个组合框来自:txtKategorie 和 txtTyp。 第一个 Combobox (txtKategorie) 的值是固定的! 我希望第二个 Combobox (txtTyp) 的值根据用户在第一个 Combobox 中的选择而改变。 如果用户选择“Datalogger”,第二个组合框应仅包含“Base Layer Classic”和“Base Layer Plus”,如图所示。 同样的想法也适用于“加速度计”。

我已将我的代码放入第一个组合框的更新后事件中:

 If txtKategorie.Value = "Datalogger" And txtTyp.ListCount = 0 Then   
    i = 1
    Do While txtTyp.ListCount < DCount("ID", "tblNomenklatur", "[Kat] = 'K'")
    txtTyp.AddItem DLookup("[Typ]", "tblNomenklatur", "[ID] =" & i And "[Kat] = 'K'")
    'And "[Kat] = 'K'"
    i = i + 1
    Loop

当表单打开时,只有第一个组合框“txtKategorie”有值。当用户选择 Datalogger 时,代码会检查 table 中有多少记录具有 [Kat] = "K" 以定义 Do While-Statement 将 运行 持续多长时间。然后“txtTyp.AddItem”-语句应将“Base Layer Classic”和“Base Layer Plus”添加到“txtTyp”组合框。但不幸的是,守则确实有效。包含两个标准的 Dlookup 语句存在问题。如果我删除两个标准中的任何一个,该代码可以工作,但显然会为第二个组合框提供错误的结果。如果我这样离开它,第二个组合框将保持为空。 有人知道我做错了什么吗?

您可以通过以下代码轻松完成。将 table 名称更改为您的 table 名称。

Private Sub txtKategorie_AfterUpdate()
    Me.txtTyp.RowSource = "SELECT DISTINCT Table1.Typ FROM Table1 WHERE Table1.Kategorie='" & Me.txtKategorie & "'"
    Me.txtTyp.Requery
End Sub

或者您可以从行源查询生成器以图形方式进行。以下是步骤。

  1. 组合框 txtKategorie 已修复。很好!
  2. 对于第二个组合框 txtTyp,请按照以下步骤操作。
  3. Select 组合框 txtTyp。从 属性 windows select Row Source 然后单击查询生成器 ... 小三点。见截图。
  4. 在查询构建器中 window 从您的数据构建一个查询 table 就像截图一样,并为 Kategorie 列设置条件 [Forms]![Form1]![txtKategorie] 保存并关闭查询构建器 window.

现在,对于 After Update 事件中的组合框 txtKategorie,请在下面的行中写入以重新查询 txtTyp。你完成了!

Private Sub txtKategorie_AfterUpdate()
    Me.txtTyp.Requery
End Sub