顾乔芝士网

持续更新的前后端开发技术栈

注意了!在VBA使用Dir函数的“隐秘陷阱”

跨多文件批量操作

在 VBA 编程中,倘若涉及跨多个文件的批量操作,那 Dir 函数往往是不可或缺的得力 “工具”。无论是合并工作簿、工作簿批量转PDF,还是批量导入图片等操作,Dir 函数都无处不在。

例如,当我们要批量获取某个文件夹下所有xlsm格式的文件名时,可以使用以下VBA代码:

Sub 批量获取xlsm格式的文件名()
    Dim fn As String
    Dim folder As String
    folder = "C:\VBAMatrix\"
    fn = Dir(folder & "*.xlsm")
    Do While fn <> ""
        Debug.Print fn
        fn = Dir
    Loop
End Sub

如果要批量获取其他格式的文件名时,只要将第五行的代码稍加修改即可。例如,要批量获取jpg格式的文件名,第五行改为:

fn = Dir(folder & "*.jpg")

Dir函数的小Bug

然而,当我们使用Dir函数匹配*.xls格式的文件时,会同时匹配到文件后缀相似的文件(.xlsm和.xlsx等格式),导致出现不符合预期的结果。为此,我们可以修正一下代码,以批量获取所有xls格式的文件名

Sub 批量获取xls格式的文件名()
    Dim fn As String
    Dim folder As String
    folder = "C:\VBAMatrix\"
    fn = Dir(folder & "*.xls")
    Dim fileExtension As String
    Do While fn <> ""
        '获取文件的后缀名,用于精确判断格式
        fileExtension = Right(fn, Len(fn) - InStrRev(fn, "."))
        If fileExtension = "xls" Then
            Debug.Print fn
        End If
        fn = Dir
    Loop
End Sub

Dir函数的缺憾

还有一个缺憾是,Dir函数并不能直接获取子文件夹下的文件名。幸运的是,“Excel矩阵”插件已经内置了“全级次遍历文件名”功能。

使用方法也非常简单:依次点击Excel矩阵-->文件管理-->遍历文件,然后我们选择一个文件夹,就将该文件夹下(含子文件夹)所有文件名称及完整路径写入一个新工作表了。

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言