1 DIR基本功能
1.1Dir函数
- 语法 Dir[(pathname[, attributes])]
- 其中两个参数都是可选参数,也就是可以默认缺省 dir 或 dir()
- 返回值缺省范围为””
- 返回一个 String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
- pathname 可选参数。用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 (“”)。
- attributes 可选参数。常数或数值表达式,其总和用来指定文件属性。如果省略,则会返回匹配 pathname 但不包含属性的文件。
- attributes 参数的设置可为:
- vbNormal 0 (缺省) 指定没有属性的文件。
- vbReadOnly 1 指定无属性的只读文件
- vbHidden 2 指定无属性的隐藏文件
- VbSystem 4 指定无属性的系统文件 在Macintosh中不可用。
- vbVolume 8 指定卷标文件;如果指定了其它属性,则忽略vbVolume在Macintosh中不可用。
- vbDirectory 16 指定无属性文件及其路径和文件夹。
- vbAlias 64 指定的文件名是别名,只在Macintosh上可用。
1.2 dir()基本用法注意
- 如果要返回文件夹,需要加入参数 ,vbDirectory
- 如果要返回文件, 默认缺省就可以,不需要加参数
- 可以使用* ?等通配符
- 必须可以判断是否包含这样文字的文件 \*星期1*
- 配合len() 判断是否为空
- 重复输入一条语句 dir(path),指针并不会往下移动,会重置这个操作
- 反而第一句 dir(path) 后面 dir缺省,指针会往下走
Sub ponyma11()
Debug.Print Dir("C:\Users\Administrator\Desktop\test1", vbDirectory _
)
Debug.Print ""
Debug.Print Dir("C:\Users\Administrator\Desktop\test1\test101.txt")
Debug.Print ""
Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.txt")
Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.txt")
Debug.Print ""
Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.*")
Debug.Print Dir("C:\Users\Administrator\Desktop\test1\*.*")
Debug.Print ""
End Sub
2 循环查找文件夹内的所有文件,dir用法特殊
- 不要反复用dir(path) 这样的完整写法
- 除了第一次,后面循环内都写缺省写法 dir 或者 dir()
- 如果后面还继续用完整写法,那么会总是只查到一个文件
Sub jackma002()
Dim path1, path2
path1 = "C:\Users\Administrator\Desktop\test1"
path2 = "\*.*"
file1 = Dir(path1 & path2)
Debug.Print file1
Do While file1 <> ""
k = k + 1
file1 = Dir()
Debug.Print file1
Loop
Debug.Print k
End Sub
3 尝试 dir() 缺省能往下移动指针的原因?
- 完整path目录的 dir(path), 推测每次都是重新dir(path),而且如果循环里加了这句,会死循环的
- 第一次dir(path) 后面dir,缺省会往下遍历文件
Sub ponyma1()
path1 = "C:\Users\Administrator\Desktop\test1"
path2 = "\*.*"
path3 = "\*.txt"
Debug.Print Dir(path1 & path2)
Debug.Print Dir(path1 & path2)
Debug.Print Dir(path1 & path2)
Debug.Print Dir(path1 & path3)
Debug.Print Dir
Debug.Print Dir
End Sub
4 改为函数,带参数传入,其他地方可以引用
Sub jackma007()
x1 = jackma008("C:\Users\Administrator\Desktop\test1", "\*.*")
End Sub
Function jackma008(path1, path2)
'Dim path1, path2 '会报错当前范围内的声明错误
' path1 = "C:\Users\Administrator\Desktop\test1"
' path2 = "\*.*"
file1 = Dir(path1 & path2)
Debug.Print file1
Do While file1 <> ""
k = k + 1
file1 = Dir()
Debug.Print file1
Loop
Debug.Print k
End Function
5 文件次序问题,和cmd
VB里调用CMD
http://club.excelhome.net/thread-1455541-1-1.html
更复杂的用法
6 其他写法
- VBA里不知道有没有其他写法
- 好像其他语言有其他 写法,比如下面的C#的写法
string[] fileNames = Directory.GetFiles(path);
string[] directories = Directory.GetDirectories(path);
foreach (string file in fileNames)
foreach (string file in fileNames.OrderBy(name => name))
7参考文档
子文件夹遍历
https://blog.csdn.net/yunbiao/article/details/84759151
https://wenku.baidu.com/view/e38504bcf8c75fbfc77db2e9.html
http://www.360doc.com/content/16/0628/22/15869834_571513031.shtml
版权声明:本文为xuemanqianshan原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。