Access VBA 动态恢复列表框之前选中项的实现方案咨询
解决方案
首先你可以直接遍历列表框的所有条目,和你存储的选中值字符串匹配,完全不需要写死索引,新增选项也不会受影响。
可直接复用的VBA代码
Dim i As Integer ' 遍历列表框所有条目 For i = 0 To Me.List_Type.ListCount - 1 ' 给当前列表值加单引号,和Backup_Chain的存储格式匹配 If InStr(Me.Backup_Chain, "'" & Me.List_Type.ItemData(i) & "'") > 0 Then Me.List_Type.Selected(i) = True End If Next i
代码说明
ItemData(i)可以直接获取列表框第i个索引位置的实际显示值,不用你手动维护值和索引的对应关系- 匹配的时候特意拼接了单引号,避免出现比如值是「Apple」和「PineApple」误匹配的问题,准确性更高
- 不管你之后新增/删除/调整列表选项顺序,这段代码都能正常运行
针对你的两个问题的直接回复
- 上面的方法就是最简便的实现方式,只需要几行循环代码就能完成所有选中条目的恢复,不需要对每个选项单独写判断
- 不需要单独写索引匹配逻辑,
ItemData属性+循环遍历的方式已经实现了动态索引匹配,完全不需要手动维护索引和值的对应关系
补充适配提示:如果你有多个列表框需要做相同的选中恢复,只要把这段代码封装成公共函数,传入列表框对象和对应的存储选中值的文本框参数就行,不用每个列表框都写一遍重复代码。
内容的提问来源于stack exchange,提问作者Lowendz113
相关产品推荐
相关产品推荐

