在VBA的江湖中,若想操控文件和文件夹,Scripting.FileSystemObject
(简称FSO)堪称一把「瑞士军刀」。它不仅能轻松实现文件创建、删除、复制,还能深入操作文件夹结构,甚至玩转文本流。今天,我们就来揭开这把神兵利器的全貌!
使用FSO前,需在VBA中引用Microsoft Scripting Runtime
:
Microsoft Scripting Runtime
若未引用,也可用CreateObject("Scripting.FileSystemObject")
动态创建,但引用后代码更健壮(支持智能提示)。
Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
Drives
:获取所有驱动器(如C盘、D盘)Dim fso As New FileSystemObject
For Each drv In fso.Drives
Debug.Print "驱动器名称:" & drv.DriveLetter
Next
Files
/ Folders
:获取文件夹内所有文件或子文件夹集合Dim folder As Folder
Set folder = fso.GetFolder("C:\MyDocs")
For Each file In folder.Files
Debug.Print "文件名:" & file.Name
Next
文件夹操作
CreateFolder
:创建文件夹(自动避坑:路径不存在则报错)If Not fso.FolderExists("C:\NewFolder") Then
fso.CreateFolder "C:\NewFolder"
End If
DeleteFolder
:删除文件夹(Force
参数可强制删除只读文件)fso.DeleteFolder "C:\OldFolder", True ' True=强制删除
MoveFolder
/ CopyFolder
:移动或复制文件夹fso.CopyFolder "C:\Source", "D:\Backup\Source"
文件操作
CreateTextFile
:创建文本文件(可指定Unicode编码)Dim txtFile As TextStream
Set txtFile = fso.CreateTextFile("C:\log.txt", True, True) ' True=覆盖,True=Unicode
txtFile.WriteLine "日志开始:" & Now
txtFile.Close
OpenTextFile
:打开文件(支持读、写、追加模式)Set txtFile = fso.OpenTextFile("C:\data.txt", ForAppending, True)
txtFile.Write "追加一行内容"
txtFile.Close
GetFile
:获取文件对象(获取大小、修改时间等属性)Dim file As File
Set file = fso.GetFile("C:\Report.xlsx")
Debug.Print "文件大小:" & file.Size & " 字节"
实用工具方法
FileExists
/ FolderExists
:防错必备!If fso.FileExists("C:\temp.txt") Then
MsgBox "文件已存在,避免覆盖!"
End If
GetParentFolderName
:获取父文件夹路径Debug.Print fso.GetParentFolderName("C:\Docs\Project\data.xlsx") ' 输出 C:\Docs\Project
GetTempName
:生成随机临时文件名Debug.Print fso.GetTempName ' 输出类似 rad7A3.tmp
Sub BatchRenameFiles()
Dim fso As New FileSystemObject
Dim folder As Folder, file As File
Set folder = fso.GetFolder("C:\Photos")
Dim i As Integer
i = 1
For Each file In folder.Files
If fso.GetExtensionName(file.Name) = "jpg" Then
file.Name = "Vacation_" & Format(i, "000") & ".jpg"
i = i + 1
End If
Next
MsgBox "重命名完成!"
End Sub
C:\Windows
)需管理员权限。\
(VBA中\\
会报错)。Scripting.FileSystemObject
替代FSO
声明。TextStream
逐行读取大文件,避免内存溢出。FileSystemObject
将VBA的文件操作能力提升到新高度。无论是日常自动化,还是复杂数据处理,它都能成为你的得力助手。记住:操作前备份,关键步骤加错误处理,方能稳中求胜!