ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 1671|回复: 1

[求助] GetAttr(mypath & myname) And vbDirectory) = vbDirectory如何理解

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-8-18 17:05 | 显示全部楼层 |阅读模式
其中的and运算不能理解其中的逻辑,在立即窗口试了几个例子,结果如下
?1 and 9
1
?9 and 1
1
?7 and 8
0
? 2 and 8
0
? 19 and 8
0
? 9 and 8
8
?8 and 5
0
其中的and运算规则是怎么样的。
第二,GetAttr(mypath & myname) And vbDirectory的返回值可能是0,或者是vbDirectory。那么为什么不直接用GetAttr(mypath & myname)  = vbDirectory。

附件大概是这个子的,网上找的
Private Sub Command1_Click()
Dim myfile, mypath, myname
myfile = Dir("c:\*.txt")
myfile = Dir()
myfile = Dir("*.bmp", vbHidden)

mypath = "c:\"
myname = Dir(mypath, vbDirectory)
Do While myname <> ""
If (GetAttr(mypath & myname) And vbDirectory) = vbDirectory Then
Print myname
End If
myname = Dir()
Loop
End Sub

TA的精华主题

TA的得分主题

发表于 2018-8-18 19:08 | 显示全部楼层
1 and 9 是位比较计算,把十进制数转换成二进制数如下:
1:0001
9:1001
相同位的两个数比较,如果都是1,则and的结果为1,否则为0,结果是:0001,转换成十进制也是1。
用dec2bin()函数可将十进制转换成二进制,dec2bin(8)=1000
不难理解,9 and 8 的结果,就是8。

一般情况下用GetAttr(mypath & myname)  = vbDirectory也是可以的。

GetAttr()返回文件或文件夹的属性。关键要注意的一点是,返回文件或文件夹属性的总和。
如果mypath & myname是一个普通文件夹,GetAttr()返回vbDirectory(即是16),如果这个文件夹被隐藏,则结果为18。所以,用GetAttr(mypath & myname)  = vbDirectory判断是不准确的。
因为16 and 16=16,18 and 16=16。所以,使用and的用法是正确的。

评分

1

查看全部评分

您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2025-1-12 10:53 , Processed in 0.030352 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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