文件操作——查找遍历

2020-07-28 10:37:23 浏览数 (1)

前面说过了文件的读取、写入,那么在操作文件之前,一般我们需要找到操作的文件的路径,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的时候,一定要记得带上路径。

vba

0 人点赞