MS Access 2016:点击列表框时确定选中行?代码无响应求助
在MS Access 2016列表框中点击时获取选中行的解决方案
你遇到的问题其实是Access事件触发时机的坑——列表框的Click事件会在选中状态更新前触发,所以这时候你遍历.Selected数组自然找不到刚点击的那行。下面给你两种靠谱的解决办法:
方法1:改用AfterUpdate事件(推荐)
这个事件是列表框选中状态完全更新后才会触发的,完美适配你的需求。不管是单选还是多选场景,都能准确拿到选中行:
单选列表框场景(更高效)
直接用.ListIndex获取当前选中行的索引(从0开始,无选中时返回-1):
Private Sub lstSector_AfterUpdate() Dim selectedRowIndex As Long With Me.lstSector If .ListIndex <> -1 Then selectedRowIndex = .ListIndex ' 示例:获取该行第一列的数据(列索引也是从0开始) MsgBox "你选中了第 " & selectedRowIndex + 1 & " 行,第一列值为:" & .Column(0, selectedRowIndex) End If End With End Sub
多选列表框场景
如果你的列表框允许多选,就用循环遍历.Selected数组:
Private Sub lstSector_AfterUpdate() Dim lngRow As Long With Me.lstSector For lngRow = 0 To .ListCount - 1 If .Selected(lngRow) Then ' 处理每一行选中的内容,比如输出该行第二列数据 Debug.Print "选中行索引:" & lngRow & ",第二列值:" & .Column(1, lngRow) End If Next lngRow End With End Sub
方法2:如果一定要用Click事件
如果因为某些原因必须用Click事件,可以通过DoEvents让系统先完成选中状态的更新,再去获取选中行:
Private Sub lstSector_Click() Dim lngRow As Long ' 让系统处理完选中状态的更新操作 DoEvents With Me.lstSector ' 单选场景直接用ListIndex If .ListIndex <> -1 Then MsgBox "选中行索引:" & .ListIndex End If ' 多选场景循环遍历Selected ' For lngRow = 0 To .ListCount - 1 ' If .Selected(lngRow) Then ' ' 处理逻辑 ' End If ' Next End With End Sub
不过还是强烈推荐用AfterUpdate事件,它是Access为选中状态变更专门设计的事件,稳定性和可读性都更好。
内容的提问来源于stack exchange,提问作者bd528
相关产品推荐
相关产品推荐

