14

我有以下值,我想将它们添加到集合中。如果值已在集合中,则消息应显示“这已添加到您的集合中”。

Dim OrdLines As New Collection

OrdLines.Add (111,this is first item)

OrdLines.Add (222,this is second item)

OrdLines.Add (333,this is third item)

OrdLines.Add (444,this is fourth item)

如何避免集合中的重复值?

4

4 回答 4

17

为避免重复without any prompts使用此方法。

代码

Sub Sample()
    Dim col As New Collection
    Dim itm

    On Error Resume Next
    col.Add 111, Cstr(111)
    col.Add 222, Cstr(222)
    col.Add 111, Cstr(111)
    col.Add 111, Cstr(111)
    col.Add 333, Cstr(333)
    col.Add 111, Cstr(111)
    col.Add 444, Cstr(444)
    col.Add 555, Cstr(555)
    On Error GoTo 0

    For Each itm In col
        Debug.Print itm
    Next
End Sub

截屏

在此处输入图像描述

解释

集合是一组有序的项目,您可以将其称为一个单元。语法是

col.Add item, key, before, after

一个集合不能有两次相同的键,所以我们正在做的是使用我们正在添加的项目创建一个键。这将确保我们不会得到重复。这On Error Resume Next只是告诉代码忽略我们在尝试添加重复项时遇到的错误,然后继续前进到下一个要添加的项目。CHR(34)无非如此,"所以上面的陈述也可以写成

col.Add 111, """" & 111 & """"

推荐阅读

Visual Basic 集合对象

高温高压

于 2013-09-14T09:10:29.897 回答
7

这是字典提供一些优势的场景之一。

Option Explicit

'Requires a reference to Microsoft Scripting Runtime.

Private Sub Main()
    Dim Dict As Scripting.Dictionary 'As New XXX adds overhead.
    Dim Item As Variant

    Set Dict = New Scripting.Dictionary
    With Dict
        .Item(111) = 111
        .Item(222) = 222
        .Item(111) = 111
        .Item(111) = 111
        .Item(333) = 333
        .Item(111) = 111
        .Item(222) = 222
        .Item(333) = 333

        For Each Item In .Items
            Debug.Print Item
        Next
    End With
End Sub
于 2013-09-15T01:01:43.767 回答
-1

将该Add方法与密钥一起使用。

句法:

OrderLines.Add(ObjectToAdd, Key)

记住 key 是一个字符串。

例子:

OrdLines.Add(222,"222")
OrdLines.Add(222,"333")
OrdLines.Add(222,"444")

OrdLines.Add(222,"222") 'This will give error
于 2013-09-14T08:19:47.340 回答
-1

假设您总是在分配一个值,那么一个内置方法可以让您检查重复项。这最好比。KeyOn Error Resume Next

If Not OrdLines.Contains(key_value) Then
    OrdLines.Add(item_value, key_value, before, after)
End If

注意这是 VB.NET,而不是 VBA/VB6。在 VBA/VB6 中,您可以编写类似于此处给出的方法的自定义函数。

于 2013-09-14T13:40:28.803 回答