VBA代码,用于搜索和存储新条目(如果尚未存储)

时间:2018-03-31 00:16:11

标签: excel vba

我正在学习VBA,我需要帮助开发一个代码来检查存储值的条目(在excel列中),但如果新条目尚未存储,它将与列表一起存储现有值(在另一个excel列中)。如果我在哪里输入第二个条目,代码将看到第二个条目是否尚未存储,如果没有,则它将添加到存储值列表中。

1 个答案:

答案 0 :(得分:0)

使用 VBA集合是创建没有重复项的列表的便捷方式。

此测试代码显示了它的工作原理。这是自解释的,但基本上您使用StoreItem将项目添加到列表中,使用ListItems在活动工作表中列出它们,并使用ClearItems重置集合。以test为例。

默认情况下,集合不允许重复并且会出错。我们只是忽略.Add命令的错误,然后我们得到一个唯一的列表。

不是将唯一字段转储到ListItems中的工作表,而只需将它们添加到组合框中,而不是.AddItem或输入到输入范围,具体取决于组合框的类型和你是如何使用它的。

Option Explicit

Public cItems As New Collection

Sub StoreItem(iValue As Variant)
    'store value in collection. (ignore error if duplicate)
    On Error Resume Next
    cItems.Add iValue, iValue
    On Error GoTo 0
End Sub

Sub ListItems()
    'dump collection onto active worksheet
    Dim x As Long
    For x = 1 To cItems.Count
        ActiveSheet.Cells(x, 1) = cItems(x)
    Next x
End Sub

Sub ClearItems()
    'empty the collection
    Set cItems = Nothing
End Sub

Sub test()
    StoreItem "dog"
    StoreItem "cat"
    StoreItem "bird"
    StoreItem "cat"
    StoreItem "dog"
    StoreItem "snake"
    ListItems
End Sub

更多信息:

...以及关于使用控件的两个答案: