【发布时间】:2020-12-22 13:14:19
【问题描述】:
我有两个组合框来自: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 保持为空。 有人知道我做错了什么吗?
【问题讨论】:
-
你不需要循环。您可以通过简单的方式实现它。对于
txtTyp组合框,创建对Row Source的查询,并为您的第一个组合框的Kategorie列设置条件,例如Forms![FormName]![txtKategorie]。在After Update事件中,只需重新查询第二个组合框。 -
我不确定您的意思:为您的第一个组合框的类别列设置条件,例如 Forms![FormName]![txtKategorie]。你能解释一下吗?谢谢。
-
看我的回答。您必须将
Form1和Table1名称更改为您的数据库Form和Table名称。 -
非常感谢您的详细回答,我会尝试并回复您!
标签: vba ms-access combobox ms-access-2007 vba7