所以我对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
错误在于:
无法获取列表属性。属性数组索引无效
答案 0 :(得分:0)
我最终(在以上评论的帮助下)解决了这个问题。感谢所有协助的人。
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