|
楼主 |
发表于 2014-11-17 12:42
|
显示全部楼层
关于把Range()或Cells()作为字典关键词时的问题补充:- Sub test() 'by kagawa
- Dim d As New Dictionary '前期绑定
-
- Dim rg1 As Range, rg2 As Range, rg3 As Range, rg4 As Range
- Set rg1 = Range("a1") '设置变量rg1为单元格A1的Range对象引用
- Set rg2 = Range("a2") '设置变量rg2为单元格A2的Range对象引用
- Set rg3 = rg1 '设置变量rg3=变量rg1 仍为单元格A1的Range对象引用
- Set rg4 = rg2 '设置变量rg4=变量rg2 仍为单元格A2的Range对象引用
-
- d.Add rg1, rg1 '用此语句添加字典关键词(此时字典中有了第1个key)
- '注意 ① 不可重复添加字典中已有的关键词
- ' ② 此时添加的关键词Keys是rg1变量、指向单元格A1的Range对象引用
- 但并非等同于直接把单元格A1的Range对象作为关键词!
- ' ③ 此时加入的Item是rg1变量、即指向单元格A1的Range对象引用
- MsgBox d(rg1) '读取rg1变量作为关键词key时的Item内容rg1指向的单元格A1(默认引用.Value值)
- MsgBox d(rg1).Value '可以读取rg1变量作为关键词key时的Item内容rg1指向的单元格A1的值
-
- MsgBox d(rg2) '由于此时字典中并不存在rg2,所以按照d(keys)=""的语法把rg2加入字典
- '(此时字典中有了第2个key)
- '注意 ① 如字典中已有关键词则引用item内容,如无则加入该关键词
- ' ② 此时添加的关键词Keys是rg2变量、指向单元格A1的Range对象引用
- 但并非等同于直接把单元格A1的Range对象作为关键词!
- ' ③ 此时加入的Item是""空白!所以Msgbox返回空白
- d(rg2) = rg2 '用此语句更新或添加字典关键词对应的内容
- ' ③ 此时加入的Item是rg2变量的.Value值!而不是指向单元格A1的Range对象引用!
- '(此时字典中仍为2个key,但第2个key的item内容得到了更新)
- MsgBox d(rg2) '读取rg2变量作为关键词key时的Item内容rg2的.Value值
- ' MsgBox d(rg2).Value '此句出错无法执行!因为Item内容为rg2的.Value值,不是单元格A2的引用
-
- ' d.Add rg3, rg3 '此句出错无法执行!因为rg3就是rg1,而rg1已经在字典中无法再次添加!
- MsgBox d(rg3) '读取rg3变量即rg1作为关键词时的Item内容rg1指向的单元格A1(默认引用.Value值)
- MsgBox d(rg3).Value '读取rg3变量即rg1作为关键词key时的Item内容rg1指向的单元格A1的值
- '(此时字典中仍只有2个key)
- MsgBox d(rg4) '读取rg4变量即rg2作为关键词key时的Item内容rg2的.Value值
- ' MsgBox d(rg4).Value'此句出错无法执行!因为Item内容为rg2的.Value值,不是单元格A2的引用
- '(此时字典中仍只有2个key)
-
- MsgBox d(Range("a1")) '由于此时字典中并不存在Range("a1")代表的变量
- '所以按照d(keys)=""的语法把Range("a1")加入字典
- '(此时字典中有了第3个key)
- ' MsgBox d(Range("a1")).Value'此句出错无法执行!因为Item内容为""空白,不是单元格A1的引用
-
- kr = d.Keys '取出所有keys……一共是3个:rg1、rg2、Range("a1")代表的变量
- '注意Range("a1")代表的变量可能是个活动变量,
- '因此每次使用d.Add Range("a1"),"" 或 d(Range("a1"))="" 都能进行新的字典key添加……
- '但也因为如此,无法依据活动的Range("a1")变量取得对应的Item内容。
- '即,(每次相同的Range("a1")变量,都会被当做新的不同的key!)
- tr = d.Items '取出所有Items……一共是3个:A1单元格的引用、A2单元格的Value值、""空白值
- Stop '暂停以便观察
-
- MsgBox "rg1: " & d(rg1) & vbCr & "rg2: " & d(rg2) & vbCr & "rg3: " & d(rg3) & vbCr & "rg4: " & d(rg4)
- '返回: rg1=A1值 rg2=A2值 rg3=A1值 rg4=A2值
- End Sub
复制代码 |
|