前景提要
再上一篇的时候,我们知道如何通过vba打开指定的excel文件了,但是在实际的工作中,我们发现情况并没有我们想象的那么简单,比方说要做公司日报汇总了,恰好今年行业市场不错,业绩也挺好,公司也是招募了不少的人手,人多好办事嘛,但是呢,需要您汇总报表数据的时候,你会发现,一个文件夹有好多文件,10+,还好,但是你一个部分起码有20+,加上其他分公司的,起码100+,让你一个个的打开文件,然后复制粘贴。。。。。想想都恐怖啊,换成我,估计直接跑到公司顶楼跳下去了,不过别慌,我们不是有VBA嘛,那么VBA可以实现这样的效果嘛?
既然我这样说了,那肯定是可以的啦(废话),现在哪里都说“科学技术是第一生产力”,一点都没错,虽然VBA算不上什么高大上的科学技术,只是一个非常简单的脚本语言,但是至少人家能够解决我们人力需要花费很长时间才能解决的问题嘛,废话有点多了,so,开工
思路
之前我们说过,VBA实现的逻辑,和我们实际手工操作是一样的,在本例中,我们想去指定的文件夹,然后打开,然后一个一个的打开excel文件,复制粘贴,然后关闭文件,再打开下一个。。。。。好了,再说下去我都觉得有点啰嗦了,上代码
上代码
这里假设我们的目标文件在D盘的新建文件夹下
Sub test()
Dim FileName$
FileName = "D:\新建文件夹"
f = Dir(FileName & "\")
Do While f <> 0
Workbooks.Open FileName & "\" & f
f = Dir()
Workbooks.Close
Loop
End Sub
代码解析
首先我们指明文件夹的位置,FileName代表的就是文件夹的位置,然后我们这里使用了dir函数,熟悉前面的内容的童鞋,应该还记得我们之前在创建文件夹的时候,使用了mkdir函数,这两个函数非常的相似,mkdir是创建文件夹的,而dir是遍历文件夹的,既然知道了dir的作用,那么第4行就好理解了,
f = Dir(FileName & "\")
就是遍历我们指定的文件夹的意思
然后我们接着往下看,这里我们使用了一个do loop循环语句,这里的作用就是dir在遍历的时候,如果找不到文件之后,他会返回一个空值,这里我们只需要判断f是否等于空就知道循环是否结束了,如果循环结束了,那么就可以跳出循环了,
这里还有一个语法知识点,在do循环中遍历的时候,f = Dir()这里是不需要再加上具体的参数的,这点要留意,否则他永远都是循环打开第一个工作表。陷入死循环。
Do While f <> 0
Workbooks.Open FileName & "\" & f
f = Dir()
Workbooks.Close
这里我们按下F8进入调试功能看看f是多少
这里我们可以看到f已经有结果了,成功的定位到了第一个文件,但是我们注意到,他只是一个文件夹的名字,要打开一个文件,我们上一次说了,需要完整的路径,所以这里我们需要重新构造一个完整路径,即:FileName & "" & f,如果还是不清楚,我们在看看结果
这样才算是完整路径,有了这个完整路径之后,我们就可以执行打开的操作了,打开操作上次已经分享了,这次我们顺带说下关闭的 操作,就是Workbooks.Close
完整代码+注释
Sub test()
Dim FileName$
FileName = "D:\新建文件夹" '指定文件夹的位置
f = Dir(FileName & "\") '循环开始
Do While f <> 0 '判断f的值,如果不是空,证明循环还没有结束
Workbooks.Open FileName & "\" & f '构造完整的路径并执行打开操作,下面你可以继续写其他的功能
f = Dir() '继续找下一个文件
Workbooks.Close '关闭已经打开的文件
Loop
End Sub
虽然现在社会上并没有专门针对VBA职位的需求,但是VBA是能够提高我们日常生产,办公效率的语言,能够节省我们很多的时间,想要准时下班,回家看球赛,陪伴家人,抓紧时间和我一起学些VBA吧。