【发布时间】:2019-04-17 09:47:18
【问题描述】:
所以我是 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
错误是:
无法获取列表属性。无效的属性数组索引
【问题讨论】:
-
嗨。抛出错误时 X 和 lbx_Filters.List(X) 的值是多少?
-
@LuisCurado 谢谢你的回复。我现在才回到这个问题。
x=1在执行时,我无法获得lbx_Filters.List(X)的值,因为这会引发错误。 -
@GMalc 感谢您的回复和链接。我遇到过这篇文章,但问题是,有了这个,“列表”需要已经完成。将会发生的事情是,用户会将第一个列表框中的项目添加到第二个列表框中,然后可能决定再次删除一个。据我所知,所提供的解决方案依赖于完整的列表/集合/数组,而不是随着我们进行动态更新。
-
你能在出错前检查 lbx_Filters 的长度吗?您可以使用 lbx_Filters.ListCount 的值创建一个 var