添加链接
link管理
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

在用vba编写自动化解决方案时,最常见的需求就是 遍历文件夹内的文件 ,然后进行相对应的处理。

在vba中,内置了 Dir 函数 可以返回模糊查找匹配的文件夹或文件名称。在vba中使用Dir函数可以实现遍历文件夹和文件的需求。

今天就让我们一起来学习下如何用dir函数遍历文件夹和文件,今天的主要内容有以下几个:

  • Dir函数的使用说明
  • 用Dir函数判断文件夹或文件是否存在
  • 用Dir函数遍历文件夹下的所有文件

    一、Dir函数的使用说明

    Dir函数可以返回一个字符串,这个字符串表示的是文件夹的名称或文件的名称。

    Dir函数的语法如下:

    Dir[(pathname[, attributes])]

    其中pathname参数表示要返回的文件或文件夹所在的路径,该参数可以使用*和?作为通配符进行模糊查找。

    attributes参数表示指定要返回的文件或文件夹的属性。

    attributes参数可以选择以下值或者以下值的和:

    vbNormal 默认值,表示指定返回没有任何属性的文件 vbReadOnly 表示指定返回没有任何属性和具有只读属性的文件 vbHidden 表示指定返回没有任何属性和具有隐藏属性的文件 VbSystem 表示指定返回没有任何属性和具有系统属性的文件,该参数在苹果系统上无效。 vbVolume 表示指定返回指定路径的磁盘卷标,该参数在苹果系统上无效。 vbDirectory 表示指定返回没有任何属性的文件和文件夹 vbAlias 表示要查找的文件名是一个别名,该参数只在苹果系统上有效。

    当attributes参数不指定时,表示返回没有任何属性的文件。

    pathname参数指定的文件或文件夹找不到时,Dir函数返回一个0长度的空字符串””。

    二、用Dir函数判断文件夹或文件是否存在

    学习了Dir函数的使用说明,接下来让我们看看如何用Dir函数判断文件夹或文件是否存在。

    1.判断文件夹是否存在

    如下图所示:

    D盘的数据文件夹下有很多文件和文件夹。

    用如下的vba代码可以判断D盘的数据文件夹下是否有”2018年”文件夹存在。

    Sub QQ1722187970()
        Dim sName As String
        '返回文件夹的名称
        sName = Dir("d:\数据\2018年", vbDirectory)
        Debug.Print sName
        If Len(sName) Then
            MsgBox "存在"
            MsgBox "不存在"
        End If
    End Sub

    2.判断文件是否存在

    3.通用的判断文件或文件夹是否存在的自定义函数

    根据上述两个判断文件夹和文件是否存在的代码,可以编写一个通用的自定义函数用于判断文件或文件夹是否存在,代码如下:

    Sub QQ1722187970()
        Dim sPath As String
        sPath = "d:\数据\2018年"
        If FileOrFolderExists(sPath, 16) Then
            MsgBox "存在"
            MsgBox "不存在"
        End If
        Dim sName As String
        sName = "d:\数据\*12月*"
         If FileOrFolderExists(sName) Then
            MsgBox "存在"
            MsgBox "不存在"
        End If
    End Sub
    Function FileOrFolderExists(ByVal sText As String, Optional iFlag As Integer = 0) As Boolean
        '默认判断文件是否存在,iFlag参数指定为16表示判断文件夹是否存
        Dim sName As String
        If iFlag = 16 Then
        '判断某个文件夹是否存在
            sName = Dir(sText, iFlag)
        '判断文件是否存在
            sName = Dir(sText)
        End If
        FileOrFolderExists = Len(sName) > 0
    End Function
    

    三、用Dir函数遍历文件夹下的所有文件

    上文中我们介绍了如何用Dir函数获取单个文件夹或文件的名称,在更多的需求中,我们需要的是遍历所有的文件夹或文件。

    Dir函数遍历文件夹下的所有文件的关键是多次使用dir函数。

    第一次使用dir函数时需要提供pathname参数,如果找到了满足条件的文件,则返回文件名。

    如果要继续查找下一个满足条件的文件,再次使用dir函数,此时不需要提供pathname参数和attributes参数。

    循环使用,直到返回的字符串为空字符串时,表示没有满足条件的文件存在,遍历完毕。

    比如用Dir函数遍历D盘的数据文件夹下的所有excel文件,可以使用如下的代码:

    Sub QQ1722187970()
        Dim sPath As String
        sPath = "d:\数据\"
        If FileOrFolderExists(sPath, 16) Then
            Dim sResult As String
            '查找第一个文件,第一次使用dir函数
            sResult = Dir(sPath & "*.xls*")
            If Len(sResult) Then
                Debug.Print sResult
                    '重复使用dir函数,此时不用输入任何参数
                    sResult = Dir
                    Debug.Print sResult
                    '直到返回的字符串为空字符串,表示遍历结束
                Loop Until Len(sResult) = 0
            End If
            MsgBox "不存在"
        End If
    End Sub
    Function FileOrFolderExists(ByVal sText As String, Optional iFlag As Integer = 0) As Boolean
        '默认判断文件是否存在,iFlag参数指定为16表示判断文件夹是否存
        Dim sName As String
        If iFlag = 16 Then
        '判断某个文件夹是否存在
            sName = Dir(sText, iFlag)
        '判断文件是否存在
            sName = Dir(sText)
        End If
        FileOrFolderExists = Len(sName) > 0
    End Function

    运行上述代码后返回的结果如下图所示:

    上文中我们分别从Dir函数的使用说明开始,介绍了dir函数的语法、以及如何用dir函数判断文件夹或文件是否存在,最后介绍了如何使用dir函数遍历某个文件夹下的所有文件。

    但是没有介绍了如何遍历文件夹及其子文件夹下的所有文件

    如果要遍历文件夹及其子文件中的文件,可以参考如何用vba遍历所有文件夹及其子文件夹?一文。

  •