加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

【VBA】 Dir 函数使用方法

(2017-03-30 09:24:31)
标签:

vba

分类: ◆VBA
【VBA】 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 MyNameAnd vbDirectoryvbDirectory Then
                
Debug.Print MyName     如果它是一个目录,将其名称显示出来。
            
End If
        End If
        
MyName Dir    查找下一个目录。
    
Loop
End Sub

以下过程利用递归可以查找目录和子目录下的所有文件。

Public Sub FindFile(mPath As String, Optional sFile As String "")
    
on Error Resume Next
    Dim 
As String, sDir() As String
    Dim 
As Long, As Long

    
If Right(mPath, 1<> "\Then
        
mPath mPath "\"
    End If
    
'查找目录下的文件
    
Dir(mPath sFile, vbArchive vbDirectory vbHidden vbNormal vbReadOnly vbSystem)
    
Do While <> ""
        Debug.Print mPath s
        Dir
    Loop
    
'查找目录下的子目录
    
Dir(mPath, vbArchive vbDirectory vbHidden vbNormal vbReadOnly vbSystem)
    
Do While <> ""
        If <> ".And <> "..Then
            If 
(GetAttr(mPath sAnd vbDirectoryvbDirectory Then
                
1
                ReDim Preserve sDir(d)
                
sDir(dmPath s
            End If
        End If
        
Dir
    Loop

    
'开始递归
    
For To d
        FindFile sDir(d"\"
    Next
End Sub 

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有