0

表:tblNomenklatur 我有两个组合框来自:txtKategorie 和 txtTyp。第一个 Combobox (txtKategorie) 的值已修复!我希望第二个 Combobox (txtTyp) 的值根据用户在第一个中选择的内容而改变。如果用户选择“Datalogger”,则第二个组合框应该只包含“Base Layer Classic”和“Base Layer Plus”,如图所示。“加速度计”也是如此。

我已将代码放入第一个 Combobox 的 AfterUpdate 事件中:

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

4

1 回答 1

1

您可以通过以下代码轻松完成。用您的表名更改表名。

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. 选择组合框txtTyp。从属性窗口中选择Row Source然后单击查询生成器...小三个点。见截图。
  4. 在查询构建器窗口中,从您的数据表(如屏幕截图)构建查询,并为Kategorie列设置条件[Forms]![Form1]![txtKategorie]保存并关闭查询 bulder 窗口。

在此处输入图像描述

现在对于事件中的 Combobox ,请txtKategorieAfter Update下面的行中重新查询txtTyp。你完成了!

Private Sub txtKategorie_AfterUpdate()
    Me.txtTyp.Requery
End Sub
于 2020-09-03T10:45:23.783 回答