当你看起来值时,Scripting.Dictionary喜欢无缘无故地添加值!用30秒的例子证明:
创建新工作表,然后填写A1:A4 = {1,2,3,4}
插入新的vba模块并添加此代码
Public Sub test()
Dim rowIndex As Integer
'
Dim dict As Scripting.Dictionary
Set dict = New Scripting.Dictionary
For rowIndex = 1 To 4
dict.Add Trim(Sheet1.Cells(rowIndex, 1).Value), rowIndex
Dim notEvenAddingSoWhyAreYouAdding As Variant
notEvenAddingSoWhyAreYouAdding = dict(Sheet1.Cells(rowIndex, 1).Value)
Next rowIndex
End Sub
在Next rowIndex
运行sub并检查dict
的值。它现在有两个值,"1"
和1
,如下图所示:
什么。的。地狱?!
我意识到Trim(...)
行中有dict.Add()
函数,这意味着有两个不同的键在使用,但为什么在查找时会添加额外的值?!这没有任何意义 - 现在dict.Count
不会给出我期望的价值。
答案 0 :(得分:3)
使用传统的dict.Add< key>,< item>创建一个代表1的字符串(例如"1"
)和密钥的项目作为数字1。
之后,您快速添加另一个数字1作为键。我个人使用dict.item(1) = "abc"
快捷添加/覆盖,但您的方法也适用。
tbh,我甚至不确定.CompareMode = vbTextCompare是否会将strin 1解析为等于数字1.无论如何,您当前正在使用vbBinaryCompare,因此无法匹配。
答案 1 :(得分:3)
正如您所指出的,您有两个不同的键,1
和"1"
。如果您尝试访问字典中尚不存在的密钥,它将自动添加该密钥。这是一种奇怪的行为。
我会用这样的东西:
If dict.Exists(something) Then
myVariable = dict.Item(something)
End If