用字典对象时,由于是后期套用,直接使用Set Dic = CreateObject("scripting.dictionary"),而没有在工程引用中相应的对象,以致于在使用 Dic.CompareMode = TextCompare 时失去作用,而Dic.CompareMode = 1 就能达到要求,原来是后期套用对象并没有将对象的保留字TextCompare 一并带出来,TextCompare 自然就为空,如果是前期引用,TextCompare 就是1。
举例说明:
先不进行前期绑定,运行前面两段代码,记录结果,然后再进行前期绑定,运行最后一段代码,与前面两段代码运行的结果对照,就明白了。
Option Explicit
Sub Test0() '后期套用,引用对象保留字
'不经绑定,后期套用,不需要前述引用,照样可以使用这个对象
Dim Dic,I&
Set Dic = CreateObject("scripting.dictionary")
Dic.CompareMode = TextCompare '如果使用了Option Explicit语句,这时系统会提示TextCompare为未定义变量
For I = 65 To 122
Dic(Chr(I)) = ""
Next
MsgBox Dic.Count '如果没有Option Explicit语句,强制要求声明变量,则返回58
End Sub
Sub Test1() '后期套用,用常数代替对象保留字
'不经绑定,后期套用,不需要前述引用,照样可以使用这个对象
Dim Dic,I&
Set Dic = CreateObject("scripting.dictionary")
Dic.CompareMode = 1 '这时候,我们只有通过使用常数1来代替TextCompare,即Dic.CompareMode = 1
For I = 65 To 122
Dic(Chr(I)) = ""
Next
MsgBox Dic.Count '返回32
End Sub
Sub Test2() '前期绑定
'VBE窗口,工具->引用->勾选 Microsoft Scripring Runtime
Dim Dic As New Dictionary,I&
Set Dic = New Dictionary
'我们希望在进行字典比较时,采用文本方式比较,不区分大小写,即a,A是当相同字符处理
Dic.CompareMode = TextCompare '这时TextCompare=1
For I = 65 To 122
Dic(Chr(I)) = ""
Next
MsgBox Dic.Count '返回32
End Sub
经测试发现,字典的默认比较模式还是无法随着option compare改变 |