前面说过了文件的读取、写入,那么在操作文件之前,一般我们需要找到操作的文件的路径,VBA对象库中,有一个FileSystem的模块,里面有关于文件操作的一些函数:
1、文件查找:
文件查找主要用到的是Dir函数,还是建议先按F1看看官方文档。
如果我们要读取一个未打开的Excel文件的数据,我们知道使用Workbooks.Open,如果我们打开的是一个并不存在的文件,将会出现错误:
这个是运行的时候才会出现的错误,也就是只有在运行过程中才能出现的错误,这个错误将直接造成我们的程序运行中断。
而从程序设计的角度来看,我们应该是希望在文件不存在的情况下,跳出一个提示框告诉我们文件不存在,而不是直接中断程序的运行。
所以,在打开文件之前,最好先能够判断文件是否存在,Dir函数就能够实现这个功能:
代码语言:javascript复制Sub TestDir()
Dim FileName As String
FileName = ThisWorkbook.Path & "1.xlsx"
If VBA.Dir(FileName) <> "" Then
Workbooks.Open FileName
Else
MsgBox "文件不存在:" & vbNewLine & FileName
End If
End Sub
这样处理,程序在运行过程中,如果不存在文件,MsgBox会跳出提示框告诉我们文件不存在,这样就比直接中断程序运行友好多了。
VBA.Dir(FileName)在FileName这个文件不存在的情况下,会返回空字符串,文件存在的情况下会返回文件的名称,所以我们可以根据它的返回值来判断文件是否存在。
2、文件遍历
如果我们想要获取1个文件夹下所有的文件名称,也可以使用Dir来获取:
代码语言:javascript复制Sub TestDir()
FTestDir ThisWorkbook.Path
End Sub
Function FTestDir(strdir As String) As Long
Dim fn As String
'*代表查找所有的文件以及文件夹,也可以使用"*.xlsx"这样的形式查找后缀为.xlsx的文件
'第一次调用返回第1个符合条件的,没有的情况下会返回空字符串
fn = VBA.Dir(strdir & "*", vbDirectory)
Do Until fn = ""
Debug.Print fn
'一定要再次调用不带参数的Dir函数,这将返回下一个符合条件的
fn = VBA.Dir()
Loop
End Function
这个功能在汇总多个Excel文件数据的时候是经常会使用到的,使用过程中要注意的是Dir返回的是文件名称,不含前面的路径,所以在使用Workbooks.Open的时候,一定要记得带上路径。