设为首页收藏本站

嘻皮客娱乐学习网

 找回密码
 中文注册
搜索
打印 上一主题 下一主题
开启左侧

[OFFICE] 字典的默认比较模式与option compare不同的原因

[复制链接]
跳转到指定楼层
楼主
发表于 2017-12-4 16:17:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
用字典对象时,由于是后期套用,直接使用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改变
回复

使用道具 举报

小黑屋|手机版|嘻皮客网 ( 京ICP备10218169号|京公网安备11010802013797  

GMT+8, 2024-5-2 12:57 , Processed in 0.207162 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表