Access VBA中二级ComboBox无法根据一级选择显示对应值的问题
问题原因及解决方法
事件类型选错了:你使用的
Change事件会在控件内容逐字符变化时触发(比如输入字符、下拉选择过程中),此时cmbTask的取值可能不是你最终选中的完整Task值,导致WHERE条件匹配错误。应该改用AfterUpdate事件,这个事件会在用户完成选择、控件值确定更新后才触发,能保证获取到完整的选中项。SQL语句存在潜在语法风险:如果Task字段的值包含单引号,你的SQL语句会直接报错。可以通过转义单引号避免这个问题,把拼接部分改成:
'" & Replace(cmbTask.Value, "'", "''") & "'冗余的Requery操作:设置
RowSource之后,Access会自动刷新控件,不需要额外调用cmbStatus.Requery,可以去掉这行代码。
修正后的代码示例:
Private Sub cmbTask_AfterUpdate() cmbStatus.RowSource = "SELECT Status FROM [DDValues] WHERE [Task] = '" & Replace(cmbTask.Value, "'", "''") & "' ORDER BY [ID] ASC" End Sub
额外检查项:
- 确认
DDValues表中确实存在对应Task的Status记录 - 确认
cmbStatus的绑定列、列宽等属性设置正确,确保Status值能正常显示
内容的提问来源于stack exchange,提问作者Shiela
相关产品推荐
相关产品推荐

