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

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

  • Count属性:字典的条目数,只读属性。
  • 将武器放进字典
36、[VBA入门到放弃笔记] 字典:属性_第1张图片
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
36、[VBA入门到放弃笔记] 字典:属性_第2张图片
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
36、[VBA入门到放弃笔记] 字典:属性_第3张图片
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
36、[VBA入门到放弃笔记] 字典:属性_第4张图片
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
36、[VBA入门到放弃笔记] 字典:属性_第5张图片
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
36、[VBA入门到放弃笔记] 字典:属性_第6张图片
Paste_Image.png
  • d.comparemode = 1是不区分大小写,那么区分大小写,自然可以写d.comparemode = 0
  • 另外,要处理大小写的问题,还可以利用 Lcase和Ucase函数来转换key的大小写。

你可能感兴趣的:(36、[VBA入门到放弃笔记] 字典:属性)