If IsNull(strRange) Then这个和 If strRange Is NULL Then有区别吗?为何好像我用IsNull不行的??

解决方案 »

  1.   

    IsNull函数指出表达式是否不包含任何有效数据任何包含NULL的表达式的值是NULL,永远不可能是True
    而is运算符用来比较两个对象的引用变量
      

  2.   

    If strRange Is NULL Then
    strRange Is NULL的值是NULL,永远不可能是True,永远不会执行Then后面的语句
      

  3.   

    strRange是个字符串吧,字符串不可能是Null的
      

  4.   

    值为Null的Variant变量自动转换为字符串时,转为""(空字符串)
      

  5.   

    嗯,对,是一个字符串。
    但是我这个串是由其他操作引发的,就是可能这个串什么都没有读到。比如这样(省略了其他部分,就关键的这段)            For iLoop = 1 To 30
                    strRange = myRegistry.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range" & iLoop)
                    If IsNull(strRange) Then
                        myRegistry.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range" & iLoop & "\*", 2, "REG_DWORD"
                        myRegistry.RegWrite "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range" & iLoop & "\:Range", CStr(strTrustedSite), "REG_SZ"
                        Exit For
                    End If
                Next
    就是说我去读注册表键值,当键值存在的话,我就往下循环(这样不至于覆盖了),当判断到键值不存在,那么就可以写入这个键值。
    于是我希望判断这个读键值后的结果,是发现不存在就是null咯,所以就开始写注册表了。不知道意思说明白了没?希望大侠指点!感激涕零~~
      

  6.   

    If strRange="" Then不行吗?
      

  7.   

    可以看看注册表中的HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Internet Settings\ZoneMap\Ranges\Range1这个地方,大侠一定明白我的意思,我希望就是做到可以添加一个 “Range*”的键值,假如已经有了Range1和Range2,我就加Range3,假如都没有,就加Range1………………依此类推
      

  8.   

    If strRange="" Then不行的,因为如果这个键值不存在,那么它不会是空值,实际上会引发异常。
    为了做到能够真正执行我for循环中的代码,实际上我是强制性的加进了 on error resume next来循环,否则根本run不下去的
      

  9.   

    用Variant可以吗?
    dim strRange as String
    改为
    dim varRange
      

  10.   

    不行,呵呵,晕~~因为其实我用的是VBScript而不是VB,不可以指定类型的。
      

  11.   

    "强制性的加进了 on error resume next来循环"
    那么,strRange = myRegistry.RegRead这一句实际上没有执行是吗?
    那你在前面加一句
    strRange = ""就可以了,如果取到值了,就不再是"",下面就可以If strRange="" Then判断了吧
      

  12.   

    嗯,谢谢了,后来我借鉴你的思路,用
    on error goto 0
    on error resume next
    if err.number <> 0 then
    来实现,已经弄好了。