Excel VBA遍历文件
休息日,无聊的上Excel Home看看有啥东东可学习,有啥问题能帮帮忙。看到很多帖子都是求助遍历特定文件夹下文件的实现方法。有朋友说03版Excel有FileSearch对象可以遍历文件夹下文件,07版中没有了FileSearch对象,不知如何遍历文件。我想03版能做的事,07版肯定能做啊,要不然不是倒退?于是搜寻一番,还真是取消了FileSearch对象啊!不过还有Scripting.FileSystemObject可以用,实现如下:
Sub main()
Dim fs, fold, fls, fl
Set fs = CreateObject("Scripting.FileSystemObject")
Set fold = fs.getfolder(folderpath) 'folderpath指文件夹路径,string型,实践中自行替换
Set fls = fold.Files
For Each fl In fls
If InStr(fl.Name, ".xls") <> 0 Then '避免打开非Excel文件
Workbooks.Open fl.Path '打开文件
statements '处理代码
Workbooks(fl.Name).Close Savechanges:=True '关闭文件
End If
Next
End Sub
而后又发现Excel VBA内置的Dir()函数同样也可以,实现如下:
Sub main()
Dim nm As String
nm = Dir(folderpath & "*.xls*") 'folderpath指文件夹路径,string型,实践中自行替换
Do While Len(nm) <> 0
Workbooks.Open folderpath & nm
statements '处理代码
Workbooks(nm).Close Savechanges:=True
nm = Dir()
Loop
End Sub
总结,编程思想都OO化了,搞的人总想着有什么对象去解决问题,孰不知OO不是全部,它也只不过是结构化的封装。就以上两种实现而言,我认为Dir函数更加效率,因为它是内置的,无需去做外部引用,而且它可以使用通配符。另外,FSO模型包含在脚本类型库 (Scrrun.dll) 中,如果电脑中没有装载脚本类型库,则FSO不可用,但不可否认,FSO模型提供了一套完备的文件处理结构,使得编码更加简单直观。