Public Sub TEST()
        Set RECORD_DIC = CreateObject("Scripting.Dictionary")
        Set RECORD_INDEX = CreateObject("Scripting.Dictionary")
    RECORD_DIC("编号") = 111
    RECORD_DIC("内容") = 5678
    
    RECORD_INDEX.Add "a", RECORD_DIC
    
    RECORD_DIC("编号") = 222
    RECORD_DIC("内容") = 7890
    
    RECORD_INDEX.Add "b", RECORD_DIC
    
    Debug.Print RECORD_INDEX.Count
    Debug.Print RECORD_INDEX("a")("编号")
    Debug.Print RECORD_INDEX("b")("编号")
End Sub
'''输出结果都是222 怎么回事?
'''RECORD_INDEX("a")("编号")和RECORD_INDEX("a")("编号") 为什么输出都是'222'   ??

解决方案 »

  1.   

    应该这样用:Public Sub TEST()
            Set RECORD_INDEX = CreateObject("Scripting.Dictionary")        Set RECORD_DIC = CreateObject("Scripting.Dictionary")
        RECORD_DIC("编号") = 111
        RECORD_DIC("内容") = 5678
         
        RECORD_INDEX.Add "a", RECORD_DIC
         
            Set RECORD_DIC = CreateObject("Scripting.Dictionary")
        RECORD_DIC("编号") = 222
        RECORD_DIC("内容") = 7890
         
        RECORD_INDEX.Add "b", RECORD_DIC
         
        Debug.Print RECORD_INDEX.Count
        Debug.Print RECORD_INDEX("a")("编号")
        Debug.Print RECORD_INDEX("b")("编号")
    End Sub
      

  2.   

    因为你对字典的理解有问题,拿一本汉语词典,通过查找任何一个汉字(比如“复”),你可以找到这个字的详细释义,这个汉字就叫索引,它对应的详细释义就是被索引的值。
    再看你的代码,RECOD_DIC("key")=value 代表创建(如果已经存在,则是编辑)一个以key为索引,value为被索引值的字典项;最终效果是手工添加一个叫“编辑”的索引,被索引值是111;
    手工添加一个叫“内容”的索引,被索引的值是5678;
    编辑一个叫“编辑”的索引,被索引值是222;
    编辑一个叫“内容”的索引,被索引的值是7890。
    明白问题在哪了吗?
    有两种改法:
    1. 按你现在的思路,维护两个字典,“INDEX -> 编号”映射,“编号 -> 内容”映射
    RECORD_DIC(111)=5678
    RECORD_INDEX("a")=111
    RECORD_DIC(222)=7890
    RECORD_INDEX("b")=222
    '取值
    Debug.Print RECORD_DIC(RECORD_INDEX("a"))
    Debug.Print RECORD_DIC(RECORD_INDEX("b"))
    2. 只用一个字典,索引用"a", "b",索引值保存一个结构体或者类对象
      

  3.   

    这种写法不是太合理,RECORD_INDEX里的每一个项保存了一本只有一个项的字典,实际上只需要保存一个项就可以。
      

  4.   

    这种写法不是太合理,RECORD_INDEX里的每一个项保存了一本只有一个项的字典,实际上只需要保存一个项就可以。
    能用就行,存在即合理;