【发布时间】:2018-06-26 19:43:18
【问题描述】:
我有两个列表框:listbox1 和 listbox2。 Listbox2 是通过用户选择填充的值列表。我需要防止将重复项输入到 listbox2 中。我当前的解决方案检查以前的列表框记录以查看它是否等于当前循环迭代 - 如果是,则删除重复项:
Set ctlSource = Me!listbox1
For intCurrentRow = 0 To ctlSource.ListCount - 1
If ctlSource.Selected(intCurrentRow) Then
strItems = "'" & ctlSource.Column(1, intCurrentRow) & "'"
Me!listbox2.AddItem (strItems)
End If
Next intCurrentRow
Dim intItems As Integer
Dim i As Integer
'deletes duplicates
For i = 0 To Me.listbox2.ListCount - 1
If Me!listbox2.ItemData(i) = Me!listbox2.ItemData(i - 1) Then
Me!listbox2.RemoveItem (i)
End If
Next i
但是,这需要对 listbox2 进行排序。我希望 listbox2 无论如何都按字母顺序排序,所以这种方法对我来说最有意义。我有点吃惊,我似乎无法找到一个现有的列表框方法或函数来让我轻松地做到这一点。我已经仔细阅读了这个论坛和其他人,但没有找到一个好的解决方案。我猜 R、Python 和 SQL 宠坏了我。任何帮助将不胜感激...
【问题讨论】:
-
首先将 listbox1 中的有效条目放入一个数组中,然后对数组进行排序,然后循环遍历它以将项目添加到 listbox2 中,这可能是最简单的。删除重复项后,您应该能够执行此操作。无需删除项目,只需将不匹配的项目添加到数组中,对数组进行排序,然后将数组值加载到 listbox2 中。
-
由于列表项可能在工作表中,因此在加载列表之前“在”加载列表之前,请使用范围内的自动过滤器唯一性或排序功能来消除重复项并按您喜欢的方式排序。我不明白我猜,你有两个列表框来删除列表 1 中存在的列表 2 中的重复项?我建议在刷新列表之前。
标签: vba sorting ms-access listbox