VBA学习笔记--遍历所有文件夹和文件
Posted Jacklovely
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了VBA学习笔记--遍历所有文件夹和文件相关的知识,希望对你有一定的参考价值。
说明(2017.3.26):
1. 采用的是兰色幻想教学视频中的“父子转换法”
2. 这种VBA的遍历文件夹方法非常难理解,主要是因为dir这个函数,第一次带参数调用,返回的是此目录下的第一个文件,第二次无参数调用,返回的是此目录下一个第二个文件,这就很操蛋了,还要配合do循环。
3. VBA的各种do..until..loop, do..while..loop, if..then..end if, for 1 to 10..next尼玛这么多关键字要死啊!不骂不痛快!本来思考的就很累,还时不时蹦出个“for缺少next”!草拟吗的!
4. VBA的数组,已经吐槽过了,一句草你麻痹送上不谢。
5. python里的一个walk就能解决的问题,现在要这么一坨。要不是python的VBA文档跟屎一样,而且还要下载一个屎一样的插件,不说了。。
6. 这次的代码只实现了遍历所有文件,下一步还要对每个word文件进行操作,提取出里面的【点拨】
7. 总结:只看见别人用VBA的时候装逼,看不到别人写VBA的时候在吃屎。
1 Public Sub test1() 2 Dim path 3 Dim filename 4 Dim folders(1 To 100) 5 Dim i%, j% 6 i = 1 7 j = 1 8 ‘ 先获取所有的文件夹 9 path = ThisWorkbook.path & "\oriFolder\" 10 folders(1) = path 11 ‘ 这里的folders数组和下面的classes数组只设置了100个长度,是为了调试方便,不然有时会出现大量空行,实际中可以增大。 12 ‘ dir第二次无参数调用,返回的是同一个文件夹下的第二个文件!! 13 ‘ filename = Dir(folders(i), vbDirectory)这里filename获取的首先是folders(1)路径下的文件夹"." 14 ‘ dir找到第一个文件夹".",这时i=1,进入do循环,把oriFolder这一层的文件夹都dir出来(101和102), 15 ‘ 找到一个文件夹就把j加1(最后j=3),把folders(i)修改为"."路径,101路径和102路径,里面的do until循环就做了这么个事 16 ‘ do until做完之后,i要加1了,变成2,这时的filename = Dir(folders(i), vbDirectory),folders(2)就是do until循环里已经修改的101路径了, 17 ‘ 继续do until循环,j目前=3,然后开始增加,目的是让folders(j)数组继续往后增加元素,等把101路径里所有文件夹路径添加进去之后, 18 ‘ i变成3,再开始遍历102文件夹 19 ‘ 如果101里面还有文件夹,就等把101和102都遍历完后,因为i每次只加1,而j是只要有一个文件夹就加1, 20 ‘ 所以只要i没有到j的数量,就会一直遍历下去,把所有的子文件遍历出来 21 Do While i <= j 22 filename = Dir(folders(i), vbDirectory) ‘ filename="." 23 Do Until filename = "" 24 If InStr(filename, ".") = 0 Then 25 j = j + 1 26 ‘ 当i=1的时候,folders(j)中的1,2,3分别是",",101,102目录 27 folders(j) = folders(i) & filename & "\" 28 End If 29 filename = Dir 30 Loop 31 i = i + 1 32 Loop 33 ‘ For p = 1 To UBound(folders) 34 ‘ If folders(p) <> "" Then 35 ‘ Debug.Print (folders(p)) 36 ‘ End If 37 ‘ Next 38 ‘ 从每个文件夹里获取所有课,存入一个数组 39 Dim classes(1 To 100) 40 Dim class 41 Dim p 42 Dim q 43 p = 1 44 q = 1 45 46 For p = 1 To UBound(folders) 47 If folders(p) <> "" Then 48 class = Dir(folders(p) & "*.*") 49 Do Until class = "" 50 classes(q) = folders(p) & class 51 q = q + 1 52 class = Dir 53 Loop 54 End If 55 Next 56 57 For x = 1 To UBound(classes) 58 If classes(x) <> "" Then 59 Debug.Print (classes(x)) 60 End If 61 Next 62 63 End Sub
以上是关于VBA学习笔记--遍历所有文件夹和文件的主要内容,如果未能解决你的问题,请参考以下文章
访问中的 Vba 代码循环遍历文件夹中的所有 excel 文件,打开、保存和关闭它们
vba 遍历指定文件夹(含子目录)获取文件名,哪种方法速度最快?