Excel VBA和文件夹-1.6遍历文件夹打开指定格式的文件
前景提要
之前我们学会了如何通过dir()来遍历文件夹并打开文件的方法,当你文件中有很多相同格式的文件要汇总的时候,就可以考虑采用这个方法了,不过实际工作中,我们总是会碰到很多种非常规的的问题,还是假设我们现在正在汇总文件夹中的数据,当我们使用上节我们学的dir()函数的时候, 会发现有些文件并不是excel文件,是一个图片,甚至是txt文件都有,原来有些人为了图方便,直接放在txt或者截个图完事,这种数据是需要经过二次处理的,直接拿过来汇总是不可能的,那么dir()能不能够指定就汇总某种类型的文件呢?
自然是可以的,这里采用的方法是类似正则的模糊匹配的方法
思路
老规矩,我们还是想象下,如果是我们人工操作的话,是如何区分的呢?很简单,看看文件结尾的格式就知道了,就是*****.xlsx这后面的.xlsx,前面我们说了,这里我们采用类似正则的模糊匹配的方法(正则的具体用法后面会阐述,这里只需要了解当前场景下的使用方法就好),好了,可以上代码了。
上代码
这里假设我们的目标文件在D:\新建文件夹-dir的目录下,我们看看测试文件夹下面有各种不同的文件
Sub test()
Dim FileName$
FileName = "D:\新建文件夹-dir"
f = Dir(FileName & "\" & "*.xlsx")
Do While f <> ""
Workbooks.Open FileName & "\" & f
Debug.Print f
f = Dir()
ActiveWorkbook.Close True
Loop
End Sub
为了更好的展示运行的效果,我们在测试代码的时候,注销掉了打开和关闭的命令,每找到一个文件就输入文件的路径,这样就可以更加清楚的知道实际运行的效果了,结果如下图:
代码解析
FileName得到的就是文件夹的路径,这个我们在之前就已经解释过了,然后来看看下一行
f = Dir(FileName & "\" & "*.xlsx")
这段代码和我们上一次的很像,确实是,非常像,仅仅是在后面增加了一点判断而已,这个判断就是*.xlsx,作用就是判断文件是以.xlsx结果的,就是office文件,这样程序仅仅会去打开报表文件,而其他的无关文件或者是需要我们二次汇总的文件,都不会干扰本次程序的执行,完美的达到了我们的目的。
为了更加清楚的说明效果,下面我们来调试下程序,这样能够更加清楚明白程序运行的过程,按下F8,进入调试
我们可以看到程序直接去寻找那些文件名是.xlsx的文件,而不会去碰其他类型的文件,这样很好的节省了我们的时间,也提升了效率,最终得到的结果,就是上面我们展示的那样了。
其实,VBA不仅仅可以打开和操作报表文件,其实它还可以操作txt文件,那么如何打开txt文件,如何操作txt文件呢?这些悬念大家可以先研究下,后面我们讲到VBA操作文本文件的时候,再和大家详细说明。
完整代码+注释
Sub test()
Dim FileName$
FileName = "D:\新建文件夹-dir" '指定文件夹路径
f = Dir(FileName & "\" & "*.xlsx") '指定要遍历的文件类型,以.xlsx结果,也可以换成.xls(07版本的文件)
Do While f <> "" '便利开始
Workbooks.Open FileName & "\" & f '打开
'Debug.Print f
f = Dir() '循环下一个文件
ActiveWorkbook.Close True '关闭当前打开的文件
Loop
End Sub '结束程序
通过上述的例子,我们可以发现VBA还是非常的灵活和强大的,毕竟VBA本身是window开发出来的脚本语言,虽然有局限性,但是在文件本身的处理上面还是非常的强大的,平时需要花费很多时间的事情,写好了VBA之后,点几下鼠标就可以搞定了,简直就是办公职场必备之良药啊。
本人已经打算长期分享一些网络搜集的各种VBA知识,如果大家有问题也可以提出来共同解决,一起进步,毕竟VBA的世界还是很大的。
因为基本上都是自学的,很多代码和知识都是来源于网络的,如果在分享的过程中,正好拿了某位大神的代码,请告诉我,我将标注代码来源出处,也方便大家学习分享,谢谢!
=============================传送门==============================
Excel VBA和文件夹-1.3创建当天日期命名的文件夹
Excel VBA和文件夹-1.4打开文件夹内excel文件的方法
Excel VBA和文件夹-1.5遍历文件夹并打开