我正在学习VBA,我需要帮助开发一个代码来检查存储值的条目(在excel列中),但如果新条目尚未存储,它将与列表一起存储现有值(在另一个excel列中)。如果我在哪里输入第二个条目,代码将看到第二个条目是否尚未存储,如果没有,则它将添加到存储值列表中。
答案 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
Stack Overflow: VBA: get unique values from array
Stack Overflow: Programatically add ComboBox in VBA (Excel)
...以及关于使用控件的两个答案:
Stack Overflow: Detailed introduction to working with different control types
Stack Overflow: Can't add items to a combobox