跨多文件批量操作
在 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矩阵-->文件管理-->遍历文件,然后我们选择一个文件夹,就将该文件夹下(含子文件夹)所有文件名称及完整路径写入一个新工作表了。