5.4.1-fso

fso在上一章节也介绍过,介绍获取某个文件的文件名。fso 为FileSystemObject的缩写,是Excel-VBA提供的一个工具包,方便我们对文件或者文件夹进行操作。其实在现在很多高级语言中,提供了大量的这种工具包,可以称为轮子,这样用户无需重复制作各种自己的小工具,大大提升个人的开发效率。

本小节汇总介绍一下fso对文件夹和文件的通用功能,不包含对文本文件读写,这个后续会介绍

1)文件夹操作

  • 1.1)文件夹存在与否判断

  • 1.2)文件夹的新建

  • 1.3)文件夹复制

  • 1.4)文件夹的删除

  • 1.5)遍历文件夹内部文件夹

  • 1.6)遍历文件夹内部文件

代码示例:

Sub main()
    '  文件夹操作
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    currentAddress = ThisWorkbook.Path
    folderAddress = currentAddress & "\" & "文件夹1"
    folderAddress2 = currentAddress & "\" & "文件夹2"
    folderAddress3 = currentAddress & "\" & "文件夹-遍历"
    
    ' 判断文件夹是否已经存在
    If fso.FolderExists(folderAddress) Then
        Debug.Print ("文件夹已存在")
    Else
        ' 若不存在,则新建文件夹
        Set objFolder = fso.Createfolder(folderAddress)
    End If
    
    If fso.FolderExists(folderAddress) Then
        ' 复制文件夹
        fso.CopyFolder folderAddress, folderAddress2
        
        fso.DeleteFolder (folderAddress)
        Debug.Print ("文件夹已删除")
    End If
    
    ' 遍历文件夹
    Debug.Print ("遍历文件夹,输出子文件夹名")
    For Each Wenjianjia In fso.GetFolder(folderAddress3).SubFolders
        WenjianjiaName = Wenjianjia.Name
        Debug.Print (WenjianjiaName)
    Next
    
    Debug.Print ("遍历文件夹,输出子文件名")
    For Each Wenjian In fso.GetFolder(folderAddress3).Files
        WenjianName = Wenjian.Name
        Debug.Print (WenjianName)
    Next
End Sub

2)文件操作

  • 2.1)文件是否存在

  • 2.2)文件的复制

  • 2.3)文件的重命名

  • 2.4)文件的删除

Sub test()
    ' 文件操作
    Set fso = CreateObject("Scripting.FileSystemObject")
     currentAddress = ThisWorkbook.Path
    
    fileAddress = currentAddress & "\" & "文件1.txt"
    fileAddress2 = currentAddress & "\" & "文件2.txt"
    
    If fso.FileExists(fileAddress) Then
        Debug.Print ("文件已存在")
        fso.CopyFile fileAddress, fileAddress2
        
        ' 修改文件名
        Set objFile = fso.GetFile(fileAddress)
        objFile.Name = "文件1-1.txt"
        
        ' 删除文件
        fso.DeleteFile (fileAddress2)
        Debug.Print ("删除文件:" & fileAddress2)
    Else
        Debug.Print ("文件不存在")
    End If

End Sub

仔细去观察以上代码,可以发现明显的规律,很多功能对于文件夹和文件操作的代码的区别就是:Folder和File,当然有些功能区别会更多一点,汇总如下:

类型

是否存在

复制

删除

获取对象

创建

文件夹

fso.FolderExists

fso.CopyFolder

fso.DeleteFolder

fso.GetFolder

fso.Createfolder

文件

fso.FileExists

fso.CopyFile

fso.DeleteFile

fso.GetFile

fso.CreateTextFile