我正在寻找一个集合中的特定元素。我如何知道它是否存在于集合中?vba:我如何通过集合进行搜索?
2
A
回答
5
如果您使用的关键,当你添加的项目收集,看看是否提到这一关键给出了一个错误:
on error goto no_item
col.Item "key"
msgbox "Item exists"
exit sub
no_item:
msgbox "Item does not exist"
否则,您必须通过所有项目环,看看是否有一个你需要。
4
集合是基于索引的。因此,您将不得不遍历集合来搜索一个项目。
Sub test()
Dim iCtr As Integer
Dim itemCount As Integer
Dim myData As Collection
Set myData = New Collection
Dim searchFor As String
myData.Add "MS", "11"
myData.Add "Oracle", "22"
myData.Add "Google", "33"
'** Searching based on value
searchFor = "Google"
itemCount = myData.Count
For iCtr = 1 To itemCount
If myData(iCtr) = searchFor Then
MsgBox myData(iCtr)
Exit For
End If
Next
'** Searching by key
MsgBox myData.Item("22")
End Sub
3
我用一个简单的工具函数遍历一个集合。它不需要直接访问索引,而是使用应该使用的VBA语言功能(比较变体和 - 各自的)。
Public Function ExistsIn(item As Variant, lots As Collection)
Dim e As Variant
ExistsIn = False
For Each e In lots
If item = e Then
ExistsIn = True
Exit For
End If
Next
End Function
2
@Josua Schmid:
我想在你的答案代码可能是正确的,但可能不正确,以及。你的函数具有类型Variant的参数,然后与集合中的每个参数进行比较。但是实际比较的是什么?在这种情况下,比较默认成员。如果集合包含某些没有指定默认成员的自定义类的成员,则可能会出现问题。在这种情况下,运行时错误438对象不支持此属性,否则会引发方法。那么你可以添加默认成员,但即使如此,它会以一种你可能不会像我担心的方式工作。
带范围的示例(对于Range-Class Value是默认成员,因此值将进行比较)。也许这正是你想要的,但也许不是。所以从我的角度来看,更好的做法是对添加到集合中的每个项目使用“密钥”,然后尝试通过其密钥获取该项目。
Debug.Print col.item(r1.Address) ' A1 Value
或者通过索引,如果没有钥匙使用:
Debug.Print col.item(1) ' A1 Value
Sub test()
Dim col As New VBA.Collection
Dim r1 As Range
Dim r2 As Range
Dim r3 As Range
Set r1 = Range("a1")
Set r2 = Range("b1")
Set r3 = Range("c1")
r1 = "A1 Value"
r2 = "B1 Value"
r3 = "C1 Value"
col.Add r1, r1.Address
col.Add r2, r2.Address
col.Add r3, r3.Address
Debug.Print ExistsIn(r1, col)
Debug.Print ExistsIn(r2, col)
Debug.Print ExistsIn(r3, col)
Dim r4 As Range
Set r4 = Range("d1")
r4 = "A1 Value"
Debug.Print ExistsIn(r4, col)
End Sub
Output:
True
True
True
True
相关问题
- 1. 如何通过VBA代码文件进行搜索
- 2. 如何通过地图进行搜索?
- 3. 如何通过JSON进行搜索?
- 4. 如何通过多列进行搜索
- 5. 如何通过集合进行绑定?
- 6. 如何通过数据表中的列联合进行搜索?
- 7. 什么集合允许我通过对象上的参数进行搜索?
- 8. Excel-VBA-Campare&通过每行中的多列进行搜索
- 9. 如何通过我的JList进行搜索?
- 10. 通过组合地理空间索引进行多维搜索
- 11. EJB - 如何通过非索引字段进行搜索?
- 12. Laravel:通过关系进行搜索?
- 13. 通过多个表进行搜索mysql
- 14. 通过对象进行实时搜索
- 15. 通过集合类型进行抽象
- 16. 我如何进行多次搜索?
- 17. 如何通过Algolia的不同变化进行搜索?
- 18. 如何通过Elasticsearch中的数组字段进行搜索?
- 19. 如何通过自己的源代码库进行搜索?
- 20. 如何使用C#Twilio API通过NearZipCode进行搜索?
- 21. 如何通过地理编码与Twitter进行搜索?
- 22. 如何通过spring-data-jpa框架进行自定义搜索?
- 23. 如何让某些表格可以通过Google进行搜索?
- 24. 如何通过自引用子主题进行递归搜索?
- 25. 如何通过上传的文件进行搜索,Asp.net mvc?
- 26. ElasticSearch如何通过2级嵌套项目进行搜索?
- 27. 如何使用Android MediaPlayer通过http流进行AAC搜索?
- 28. 休眠 - 通过多个集合进行集合选择
- 29. 我应该如何处理通过Java中的字节数组进行搜索?
- 30. 我将如何对MediaStore中的歌曲进行过滤搜索?
这是一个重复的问题;请参阅:http://stackoverflow.com/questions/137845/determining-whether-an-object-is-a-member-of-a-collection-in-vba – 2010-08-27 18:59:47