VBA "All" 带有列表框取消选择循环问题的复选框

VBA "All" checkbox with listbox deselect loop issues

我有一个复选框,用于 "ALL"(默认选中)多选列表框中的选择,当列表框中的项目被选中时,该复选框将被取消选中。我还对其进行了编码,以便在选择 "ALL" 时清除列表框选择并选中该框。它最终循环遍历不同的潜艇,让用户感到厌烦。

例如,当我单击列表框中的某个项目时,它会选择该值,然后取消选中该复选框。由于复选框被取消选择,它通过列表框返回并取消选择所选项。它在两个潜艇之间循环几次,最后只能正常工作一半的时间。

我可以防止进入另一个子吗? 有没有更好的逻辑,所以它不会像现在这样循环? 或者也许有更好的方法来实现这一目标?

多选列表框:

Private Sub Mkts_Change()

If Me.cheMkts.Value = True Then
Me.cheMkts.Value = False
End If

End Sub

复选框:

Private Sub cheMkts_Click()
Dim i As Integer

For i = 0 To Mkts.ListCount - 1
If Me.Mkts.Selected(i) = True Then
    Me.Mkts.Selected(i) = False
End If
Next
End Sub

如何在 cheMtks_Click() 周围添加一个 If 语句? 这样,当您的代码自动取消选择它时,它不应触发循环。

Private Sub cheMkts_Click()
    If Me.cheMkts.Value = True Then
        Dim i As Integer

        For i = 0 To Mkts.ListCount - 1
            If Me.Mkts.Selected(i) = True Then
                Me.Mkts.Selected(i) = False
            End If
        Next
    End If
End Sub

谢谢你的帮助,鲁本。一方面纠正了错误,但另一方面我仍然遇到问题。当我进行选择并单击 "ALL" 框时,它会取消选中。

我想出了这段代码,它与你的建议结合起来效果很好,但只有当我选择了一个项目时。如果还有更多内容,那么它仍然会搞砸。我想 post 看看您或其他人是否可以建议多选的解决方案。

Private Sub Mkts_Change()
Dim i As Integer, count As Integer

For i = 0 To Mkts.ListCount - 1
If Me.Mkts.Selected(i) = False Then
    count = count + 1
End If
Next


If Me.cheMkts.Value = True And count <> Mkts.ListCount Then
Me.cheMkts.Value = False
End If

End Sub