希望更好地了解如何比较对象类型的键。 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

dic1dic2是2个完全不同的对象,即使它们包含相同的键。 .exists不比较这些对象的内容,只是看到这些对象是不同的对象。

例:
假设.exists检查框中是否有特定对象,并且您有2个名为dic1dic2的苹果。如果将苹果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相同的键,则必须检查…。


如果dic1dic2具有相同的键计数(如果dic2具有来自dic1的所有键,但加上其他键,则是必需的!)
如果first为true,则循环遍历dic1的所有键,并检查dic2中是否存在每个键。


这是有关字典的好资源:VBA DictionaryUsing the Dictionary Class in VBA

07-25 23:21