Access VBA:表单中联动列表框失效问题排查
问题
在Access表单中添加了两个依赖型列表框(Trend列表List35和Subtrend列表List37),为List35的AfterUpdate事件编写的VBA代码无法在选中项时更新List37,求故障原因。
现有VBA代码
Private Sub List35_AfterUpdate() Dim strSQL As String Dim selectedValue As Variant ' Get the selected value from the first combo box selectedValue = Me.List35.Value ' Construct the SQL statement to filter the second combo box strSQL = "SELECT L1_L2_Mapping.L2_Subtrend FROM L1_L2_Mapping WHERE L1_L2_Mapping.L1_Trend = " & selectedValue ' Set the RowSource of the second combo box (table 2) and requery it Me.List37.RowSource = strSQL Me.List37.Requery End Sub
Subtrend列表框默认行源查询
SELECT L1_L2_Mapping.L1_Trend, L1_L2_Mapping.L2_Subtrend FROM L1_L2_Mapping WHERE (((L1_L2_Mapping.L1_Trend)=[Forms]![Dashboard]![List35]));
故障原因分析
- 文本类型字段未加单引号:如果
L1_Trend是文本字段,拼接SQL时没给selectedValue加单引号,会直接导致SQL语法错误,Access无法执行查询。正确写法应为:strSQL = "SELECT L1_L2_Mapping.L2_Subtrend FROM L1_L2_Mapping WHERE L1_L2_Mapping.L1_Trend = '" & selectedValue & "'" - 冗余操作引发刷新异常:设置
RowSource时Access会自动触发列表框重新查询,后续的Requery属于多余操作,可能导致不必要的刷新冲突。 - List35绑定列错误:若List35的绑定列不是
L1_Trend字段,Me.List35.Value获取的不是所需筛选值,会导致SQL查询无结果。需检查List35的「绑定列」属性是否正确指向L1_Trend。 - 两种联动逻辑冲突:Subtrend列表框原本的行源已通过
[Forms]![Dashboard]![List35]实现联动,代码重新设置行源后,若SQL存在错误,会覆盖原本正常的联动逻辑,导致列表无数据。
内容的提问来源于stack exchange,提问作者TommyBZ
相关产品推荐
相关产品推荐

