VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项相关的知识,希望对你有一定的参考价值。
所以我是VBA编码的表格方面的新手,我似乎对这个问题有点挣扎。
我所做的是遵循本教程:
https://www.excel-easy.com/vba/examples/multiple-list-box-selections.html
而且我已经以适合我需要的方式对其进行了调整,但现在我遇到了一两个问题我不明白如何解决。
教程中的代码向表单添加两个列表框,然后添加按钮将项目从第一个列表框复制到第二个列表框,删除按钮从第二个列表框中删除项目。
问题是你可以多次添加一个特定的项目,并考虑到我想使用第二个列表框中的值,这是一个问题,因为我只需要唯一的值。
下面的代码是我到目前为止提出的,但我收到一个错误:
Private Sub btn_Add_Filter_Click()
For i = 0 To lbx_Filters_List.ListCount - 1
If lbx_Filters_List.Selected(i) = True Then
For X = 0 To lbx_Filters.ListCount
If Not IsError(lbx_Filters.List(X)) Then
mVal = 0
If lbx_Filters.List(X) <> "" And lbx_Filters.List(X) = lbx_Filters_List.List(i) Then
myVal = 1
End If
End If
If myVal = 0 Then
lbx_Filters.AddItem _
lbx_Filters_List.List(i)
End If
Next X
End If
Next i
End Sub
第二次尝试从第一个列表框中添加相同项时发生错误,发生的情况是第二个for循环将循环一次,在第二个循环中它会在此行引发错误:
If Not IsError(lbx_Filters.List(X)) Then
错误是:
无法获取列表属性。无效的属性数组索引
答案
我最终(借助上述评论)解决了这个问题。感谢所有协助的人。
Private Sub btn_Add_Filter_Click()
Dim Size As Integer
Size = lbx_Filters.ListCount
Dim ListBoxContents() As String
Dim ListBoxC() As Variant
Dim i As Integer, y As Integer, X As Integer, myVal As Integer, lItem As Integer
myVal = 0
For i = 0 To lbx_Filters_List.ListCount - 1
If lbx_Filters_List.Selected(i) = True Then
If Size > 0 Then
For lItem = 0 To lbx_Filters.ListCount - 1
For X = 0 To lbx_Filters_List.ListCount - 1
If Not IsError(lbx_Filters_List.List(X)) And lbx_Filters.List(lItem) = lbx_Filters_List.List(i) Then
myVal = 1
End If
Next X
Next lItem
End If
If myVal = 0 Then
lbx_Filters.AddItem _
lbx_Filters_List.List(i)
End If
End If
Next i
End Sub
以上是关于VBA - Excel列表框 - 在向第二个列表框添加项目时查找重复项的主要内容,如果未能解决你的问题,请参考以下文章