美文网首页
36、[VBA入门到放弃笔记] 字典:属性

36、[VBA入门到放弃笔记] 字典:属性

作者: 叶知行 | 来源:发表于2017-06-30 08:59 被阅读126次

    字典作为一个对象,自然有其属性。字典有COUNT/KEY/ITEM/COMPAREMODE四个属性。

    • Count属性:字典的条目数,只读属性。
    • 将武器放进字典
    Paste_Image.png
    Sub a()
        Dim arr, d As Object
        Set d = CreateObject("scripting.dictionary")
        arr = [a1].CurrentRegion
        '----------新增字典d的条目-----------------------
        For i = 2 To UBound(arr)
            d(arr(i, 1)) = arr(i, 2)
        Next
      n = d.Count                    'n=7
    End Sub
    
    • 这里字典的条目数是7,也就是有7种武器。

    • Key属性:字典的关键字,如果要改变一个Key,字典里没有的,那么就新建一个,字典里已经有的,就改变其关键字key,item不变。继续使用上面示例。
    Sub a()
        Dim arr, d As Object
        Set d = CreateObject("scripting.dictionary")
        arr = [a1].CurrentRegion
        '----------新增字典d的条目-----------------------
        For i = 2 To UBound(arr)
            d(arr(i, 1)) = arr(i, 2)
        Next
      d.Key("砖头") = "金砖"  '改变key关键字,砖头--->金砖,item不变。
      s = d("金砖")
      ss = d("砖头")
    End Sub
    
    Paste_Image.png
    • 运行代码后,金砖这个关键字已经取代砖头了,但是item不变,仍是原来砖头这个key的item。

    • Item属性:改变字典的某个key的item。
    Sub a()
        Dim arr, d As Object
        Set d = CreateObject("scripting.dictionary")
        arr = [a1].CurrentRegion
        '----------新增字典d的条目-----------------------
        For i = 2 To UBound(arr)
            d(arr(i, 1)) = arr(i, 2)
        Next
      d.Item("砖头") = 110
      s = d("砖头")
    End Sub
    
    Paste_Image.png
    • 运行代码,砖头这个武器的价格就变成了110.实际上,d.item(key)里面的 .item 是可以省略的,我们平常一般修改的都是字典的item,很少修改其key。因此,这里都也是十分推荐使用=号的。
    Sub a()
        Dim arr, d As Object
        Set d = CreateObject("scripting.dictionary")
        arr = [a1].CurrentRegion
        '----------新增字典d的条目-----------------------
        For i = 2 To UBound(arr)
            d(arr(i, 1)) = arr(i, 2)
        Next
      d("砖头") = 110   '省略了  .item
      s = d("砖头")
    End Sub
    
    Paste_Image.png
    • Comparemode属性:key是否区分大小写。
    数据源
    Sub ff()
    Set d = CreateObject("scripting.dictionary")
        For i = 1 To 4
            d(Cells(i, 1).Value) = Cells(i, 2)
        Next
        s = d.keys
        ss = d.items
    End Sub
    
    Paste_Image.png
    • 显然默认区分大小写
    • 如何使其不区分大小写?A和a是同一个key。
    Sub ff()
    Set d = CreateObject("scripting.dictionary")
    d.comparemode = 1  '增加此句
        For i = 1 To 4
            d(Cells(i, 1).Value) = Cells(i, 2)
        Next
        s = d.keys
        ss = d.items
    End Sub
    
    Paste_Image.png
    • d.comparemode = 1是不区分大小写,那么区分大小写,自然可以写d.comparemode = 0
    • 另外,要处理大小写的问题,还可以利用 Lcase和Ucase函数来转换key的大小写。

    相关文章

      网友评论

          本文标题:36、[VBA入门到放弃笔记] 字典:属性

          本文链接:https://www.haomeiwen.com/subject/aulbcxtx.html