回 帖 发 新 帖 刷新版面

主题:一个很奇怪的AND问题

If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
         Debug.Print MyName   ' 如果它是一个目录,将其名称显示出来。
      End If



大家看见没有,上面if语句中有一个and,不知道在这里是什么意思?
单纯用if getAttr(Mypath & Myname) = vbdirectory then
不就可以了么?为什么还要加一个and vbdirectory

我是从MSDN中复制出来的,还有很多都是类似情形,比如:
Effect = vbDropEffectCopy and vbDropEffectCopy
这里不用后面的and VbDropEffectCopy就不行了???奇怪了,不知道有什么区别

回复列表 (共6个回复)

沙发

很简单,把自己认为不需要的部分去掉,然后在不同参数下运行。
如果没有差别,那就好了。
如果有差别,在测试逻辑表达式个部分的值,找到原因,就知道了。

板凳

问题是测试结果一摸一样,现在的问题是要把这种表达方式搞清楚:-)

3 楼

If GetAttr(MyPath & MyName) And vbDirectory Then
 '这样不行吗?
endif

4 楼

GetAttr(MyPath & MyName)
返回的属性可能包含多个属性值,它们是通过位或运算Or合并成一个整数的
所以需要用位与运算And分离,测试是否包含自己需要的属性

例如你想测试一个文件是不是同时具有"隐藏"和"系统"属性,可以这样
    If GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly) Then
        'Place your code here
    End If

5 楼

[quote]GetAttr(MyPath & MyName)
返回的属性可能包含多个属性值,它们是通过位或运算Or合并成一个整数的
所以需要用位与运算And分离,测试是否包含自己需要的属性

例如你想测试一个文件是不是同时具有"隐藏"和"系统"属性,可以这样
    If GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly) Then
        'Place your code here
    End If[/quote]
"隐藏"或"只读"

6 楼

[quote][quote]GetAttr(MyPath & MyName)
返回的属性可能包含多个属性值,它们是通过位或运算Or合并成一个整数的
所以需要用位与运算And分离,测试是否包含自己需要的属性

例如你想测试一个文件是不是同时具有"隐藏"和"系统"属性,可以这样
    If GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly) Then
        'Place your code here
    End If[/quote]
"隐藏"或"只读"[/quote]
需要测试的是"隐藏"且"只读",不是或.
我的代码错了,测试2个以上的结果需要加上=号,
(GetAttr("D:\test.txt") And (vbHidden Or vbReadOnly)) = (vbHidden Or vbReadOnly)

或者这样吧
    Dim ret As VbFileAttribute
    ret = GetAttr("D:\test.txt")
    If (ret And vbHidden) And (ret And vbReadOnly) Then
        'Place your code here
    End If

我来回复

您尚未登录,请登录后再回复。点此登录或注册