VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
来源:互联网 发布:大连中车待遇 知乎 编辑:程序博客网 时间:2024/06/06 02:40
Dir 函数
返回一个String,用以表示一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。
语法
Dir[(pathname[,attributes])]
Dir 函数的语法具有以下几个部分:
设置值
attributes参数的设置可为:
注意 这些常数是由 VBA 所指定的,在程序代码中的任何位置,可以使用这些常数来替换真正的数值。
说明
在 Microsoft Windows 中,Dir 支持多字符 (*) 和单字符 (?) 的通配符来指定多重文件。
在第一次调用Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。
Dir 会返回匹配pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用Dir 不能连续地返回子目录。
提示由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。
Dir 函数示例本示例使用 Dir 函数来检查某些文件或目录是否存在。
Dim MyFile, MyPath, MyName
返回“
'WIN.INI
”(
在 Microsoft Windows
中)
(如果该文件存在)。MyFile = Dir("C:\WINDOWS\WIN.ini")
'
返回带指定扩展名的文件名。如果超过一个 *.ini
文件存在,'
函数将返回按条件第一个找到的文件名。MyFile = Dir("C:\WINDOWS\*.ini")
'
若第二次调用 Dir
函数,但不带任何参数,则函数将返回同一目录下的下一个 *.ini
文件。MyFile = Dir
'
返回找到的第一个隐式 *.TXT
文件。MyFile = Dir("*.TXT", vbHidden)
'
显示 C:\
目录下的名称。MyPath = "c:\" '
指定路径。MyName = Dir(MyPath, vbDirectory)
'
找寻第一项。Do While MyName <> "" '
开始循环。
'
跳过当前的目录及上层目录。
If MyName <> "." And MyName <> ".." Then
'
使用位比较来确定 MyName
代表一目录。
If (GetAttr(MyPath & MyName) And vbDirectory) = vbDirectory Then
Debug.Print MyName '
如果它是一个目录,将其名称显示出来。
End If
End If
MyName = Dir '
查找下一个目录。Loop
'只需要文件名不要路径可以用这个
Sub 利用Dir函数搜索指定目录下所有指定文件()
Dim MyFile As String, MyPath As String, i As Integer
MyPath = "C:\windows\"
i = 0
MyFile = Dir(MyPath & "*.ini")
'如果上行未找到,则下行的条件肯定不满足了:Dir函数未找到符合条件的结果时,返回一个空字符串,长度为0
Do While Len(MyFile) > 0
MyFile = Dir '只需对Dir进行循环操作即可,因为上面已经有一行查找命令了.
Debug.Print MyFile '只输出文件名,而不显示路径,用处很大.
i = i + 1
Loop
Debug.Print "共找到" & i & "个文件"
End Sub
输出结果:
win.ini
msdfmap.ini
ODBCINST.INI
vb.ini
vbaddin.ini
desktop.ini
...
'需要完整路径的文件名可以用这个
Sub 利用FileSearch对象搜索指定目录下的所有文件()
Dim i As Integer, xls() As String
Dim sr As FileSearch '定义一个文件搜索对象
Set sr = Application.FileSearch
sr.LookIn = "c:\windows\" '注意路径,换成你实际的路径
sr.Filename = "*.ini" '搜索所有文件
sr.Execute '执行搜索
ReDim xls(sr.FoundFiles.Count)
For i = 1 To sr.FoundFiles.Count
xls(i) = sr.FoundFiles(i) '因为下面需要打开指定路径下的文件,故就不需再去掉路径名了,直接将完整路径输入即可.
Debug.Print xls(i)
Next
End Sub
输出结果:
C:\WINDOWS\ApabiMaker.INI
C:\WINDOWS\callInfo.ini
C:\WINDOWS\capture.ini
C:\WINDOWS\control.ini
C:\WINDOWS\desktop.ini
...
下面是一个将指定目录下所有指定文件类型提取至工作表并进行排序且更名的代码:
Sub 将指定目录下的指定文件类型提取至工作表并排序且进行更名()
Dim MyFile As String, MyPath As String, i As Integer, arr() As String
MyPath = "e:\temp\"
i = 0
MyFile = Dir(MyPath & "*.txt")
Do While Len(MyFile) > 0
i = i + 1
ReDim Preserve arr(i)
arr(i) = MyFile
MyFile = Dir
Loop
With Worksheets("sheet6")
.Cells(1, 1).Value = "文件名"
.Range("A2:A" & UBound(arr) + 1).Value = Application.WorksheetFunction.Transpose(arr)
' 本来想去掉扩展名,现在想想不需要去掉扩展名,直接带着就可以.
' For i = 1 To UBound(arr)
' .Cells(i + 1, 1).Value = Replace(LCase(.Cells(i + 1, 1).Value), ".txt", "")
' Next i
.Range("A1").Sort Key1:=.Range("A1"), Order1:=xlAscending, header:=xlYes
'如果只是改名的话,那新旧文件名都要带上完整路径,不然就移到当前工作簿所在文件夹了.
For i = 1 To UBound(arr)
Name MyPath & .Cells(i + 1, 1).Value As MyPath & Worksheets("sheet4").Cells(i + 1, 1).Value & ".txt"
Next i
End With
End Sub
- VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
- [Excel VBA] 查找指定目录下的匹配文件
- C++及API函数实现查找某目录下指定类型的文件
- vc查找指定目录下的文件:
- 查找指定目录下的文件
- 遍历指定目录下指定类型文件的函数
- delphi遍历指定目录下指定类型文件的函数
- 指定目录下查找指定目录(文件)
- Linux下,查找指定目录下的文件(find)
- c++查找目录下的指定类型的全部文件
- vc__在指定目录下查找文件
- 查找指定目录下的特定文件 (包括子目录)
- C++实现查找指定目录下的文件
- 查找指定目录下的文件夹或文件
- 在指定目录下的文件中查找关键字
- Python:在指定目录下查找满足条件的文件
- 查找指定目录下的所有日志文件*.log perl
- java 查找目录下指定文件名的文件
- Mark
- 如何让DIV固定在页面的某个位置而不随着滚动条随意滚动
- android实现自动对焦拍照
- ubuntu下安装svn
- Java reference的种类及使用场景
- VBA实战技巧精粹012:查找指定目录下的指定文件及Dir函数用法
- 使用Java反射机制实现访问其他类的私有方法
- Javascript常用函数及基本教程集合的用法参考
- 大数据量下not in, not exists, left join的比较
- C#和Java的区别
- 基于Android的太阳方位角计算工具
- XML基础
- Oracle10.2.0.1 For CentOS6.0 安装文档(三)
- ECG自定义及二次开发