潇潇雨雨
Dir 函数语法:Dir[(pathname[, attributes])] 两个参数都是可选的,attributes表示文件属性。功能:返回一个文件名、目录名或文件夹名称,它必须与指定的模式或文件属性、或磁盘卷标相匹配。说明:在第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。示例:Debug.Print Dir("F:\TEST.xls") ’返回"TEST.xls"Debug.Print Dir("F:\*.xls") ’返回按条件第一个找到的文件名。Debug.Print Dir("F:\*.txt",vbReadOnly) ’返回第一个只读的txt文件以下过程可显示C盘根目录下的所有目录.Sub DirC()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 ' 查找下一个目录。LoopEnd Sub以下过程利用递归可以查找目录和子目录下的所有文件。Public Sub FindFile(mPath As String, Optional sFile As String = "")On Error Resume NextDim s As String, sDir() As StringDim i As Long, d As LongIf Right(mPath, 1) <> "\" Then mPath = mPath & "\"End If'查找目录下的文件s = dir(mPath & sFile, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)Do While s <> "" Debug.Print mPath & s s = dirLoop'查找目录下的子目录s = dir(mPath, vbArchive + vbDirectory + vbHidden + vbNormal + vbReadOnly + vbSystem)Do While s <> "" If s <> "." And s <> ".." Then If (GetAttr(mPath & s) And vbDirectory) = vbDirectory Then d = d + 1 ReDim Preserve sDir(d) sDir(d) = mPath & s End If End If s = dirLoop'开始递归 For i = 1 To d FindFile sDir(d) & "\"Next