MSAccess-清除多选列表框,移至第一行,未选中

时间:2019-02-01 13:53:03

标签: ms-access access-vba

我在表单上有多个选择列表框的集合,用于过滤子表单上的记录。在我的实现中,我在每个列表的顶部都有一个Null记录,以表示“全选”。它正在按要求工作。

我在列表框集合旁边有一个“清除过滤器”按钮,以取消选择所有列表框中的任何选定选项。除此方法外,其他方法也可以解决每个列表的底部问题。

我的偏好是返回到每个列表框的TOP(移至Null行),而无需实际选择该行。在取消选择循环之后添加3行,可以让我到达需要的位置,但感觉很笨拙。

是否有更好的方法来达到相同的结果?

Private Sub btnClear_Click()

Dim i As Integer

    'Step thru the listbox options and de-select

    For i = 0 To Me!lstState.ListCount
        Me!lstState.Selected(i) = False
    Next i

    Me!lstState.SetFocus
    Me!lstState.ListIndex = 0
    Me!lstState.Value = ""

    '...5 more list boxes not shown here

    Forms!MainForm!Accounts_subform.Form.FilterOn = False

End Sub

1 个答案:

答案 0 :(得分:1)

您正在向前迭代,因此最终到达底部是合乎逻辑的。

向后迭代以结束于顶部(并确保选择了第一项以确保结束于最顶部):

Dim i As Long 'Selected expects a long, avoid casting for each property call
With Me!lstState
    .Selected(0) = True
    For i = .ListCount To 0 Step -1
        .Selected(i) = False
    Next i
End With