我正在做一个小项目,对以下代码有困难。在此之前获得了代码第二部分的帮助(有意包含仅用于加载前三个项目(adig,altay,ataysk)的代码以检查代码:
Dim adig(), altay(), altaykr(), amur(), arh(), astr(), bashk(), belgor(), bryansk(), buryat(), vladim(), volgo(), vologod(), fulllist() As Variant
adig = ActiveWorkbook.Worksheets("Cities").Range("adig").Value
altay = ActiveWorkbook.Worksheets("Cities").Range("altay").Value
altaykr = ActiveWorkbook.Worksheets("Cities").Range("altaykr").Value
fulllist =ActiveWorkbook.Worksheets("Cities").Range("fulllist").Value
If (Not ListofExcludelocations.Selected(0)) And Excludelocations.Value =True Then
For Each i In adig
NegKeyList.AddItem i
Next i
End If
If (Not ListofExcludelocations.Selected(1)) And Excludelocations.Value =true Then
For Each i In altay
NegKeyList.AddItem i
Next i
End If
If (Not ListofExcludelocations.Selected(3)) And Excludelocations.Value = True Then
For Each i In altaykr
NegKeyList.AddItem i
Next i
End If
For i = NegKeyList.ListCount - 1 To 0 Step -1
If Not IsError(Application.Match(NegKeyList.List(i), fulllist, 0)) Then
NegKeyList.RemoveItem i
End If
Next i
TextBox2.Value = NegKeyList.ListCount & " neg.keys"
Next j
End sub
当选中复选框时,代码会将数组中每个命名范围中的项目加载到listbox1中。这部分工作正常。我在以下方面遇到困难: 1.如果未选中该代码的第二部分,则实际上不会从该复选框中删除这些项目。有人可以检查出什么毛病,因为我听不懂吗? 2.每个范围(arh,astr等)包含不同数量的项目。我需要确保,如果未选择列表框项,则每个范围的值都将加载到列表框。显然,现在的工作方式是我必须为每个项目分别创建一个If语句。它使很少数量的项目成为现实,但是我希望这段代码适用于具有70多个范围的数组。有人可以帮我更改它,而不需要像现在这样对数组中的每个项目都执行If语句,而是使用FOr each ...语句吗?
预先感谢,希望有人能帮助我
角色
答案 0 :(得分:0)
通过将值复制到隐藏列表框中找到解决方案。
For counter1 = NegKeyList.ListCount - 1 To 0 Step -1
For counter2 = 0 To Bcities.ListCount - 1
'InStr returns 0 when there's no match
If (CStr(NegKeyList.List(counter1))) = (CStr(Bcities.List(counter2))) Then
NegKeyList.RemoveItem (counter1)
Exit For 'Skip any more compares for the deleted Item
End If
Next counter2
Next counter1