希望更好地了解如何比较对象类型的键。 dicOverall.exists(dic2)
返回False
,而dicOverall.exists(dic1)
返回True
。我不太确定.Exists
如何比较内容(循环?),但是无论如何,我可以得到.Exists(dic2)
返回True
吗?谢谢!
Sub test()
Dim dic1 As Object
Dim dic2 As Object
Dim dicOverall As Object
Set dic1 = CreateObject("scripting.dictionary")
Set dic2 = CreateObject("scripting.dictionary")
Set dicOverall = CreateObject("scripting.dictionary")
dic1("Hi") = 1
dic1("Hello") = 1
dic2("Hi") = 1
dic2("Hello") = 1
dicOverall(dic1) = 1
Debug.Print dicOverall.exists(dic2)
End Sub
最佳答案
我想如果你这样做
dicOverall(dic1) = 1
那么
dicOverall
中唯一存在的键是对象dic1
,您问dic2
中是否存在键dicOverall
?答案不能是true
,而是总是false
。dic1
和dic2
是2个完全不同的对象,即使它们包含相同的键。 .exists
不比较这些对象的内容,只是看到这些对象是不同的对象。例:
假设
.exists
检查框中是否有特定对象,并且您有2个名为dic1
和dic2
的苹果。如果将苹果dic1
放入框中,并用.exists
进行检查,如果苹果dic2
在框中,则不会。 .exists
不会检查框中是否有苹果,而是会检查框中是否有名为dic2
的特定苹果。即使它们都是苹果,看起来也一样。Sub AppleExample()
Dim apple1 As Object
Dim apple2 As Object
Dim box As Object
Set apple1 = CreateObject("scripting.dictionary")
Set apple2 = CreateObject("scripting.dictionary")
Set box = CreateObject("scripting.dictionary")
'apple1 has 1 stem and a red color
apple1("stem") = 1
apple1("redColor") = 1
'apple2 has 1 stem and a red color
apple2("stem") = 1
apple2("redColor") = 1
'put apple1 into the box
box(apple1) = 1
'check if apple2 is in the box
Debug.Print box.exists(apple2)
End Sub
如果要检查框中是否有类似
apple1
但实际上是apple2
的内容,则必须自己检查所有属性(茎,颜色,…)。如果要检查
dic1
是否具有与dic2
相同的键,则必须检查…。如果
dic1
和dic2
具有相同的键计数(如果dic2
具有来自dic1
的所有键,但加上其他键,则是必需的!)如果first为true,则循环遍历
dic1
的所有键,并检查dic2
中是否存在每个键。这是有关字典的好资源:VBA Dictionary和Using the Dictionary Class in VBA