VBA学习笔记(8)--遍历所有文件夹和文件

说明(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
时间: 2025-01-01 13:59:06

VBA学习笔记(8)--遍历所有文件夹和文件的相关文章

Web 在线文件管理器学习笔记与总结(11)获取文件夹信息 (12)返回上一级操作

(11)获取文件夹信息 文件夹没有修改操作. index.php: <?php require 'dir.func.php'; require 'file.func.php'; require 'common.func.php'; $path = 'file'; $path = @$_REQUEST['path'][email protected]$_REQUEST['path']:$path; $info = readDirectory($path); if($info == NULL){ e

R语言学习笔记之: 论如何正确把EXCEL文件喂给R处理

前言: 应用背景兼吐槽 继续延续之前每个月至少一次更新博客,归纳总结学习心得好习惯. 这次的主题是论R与excel的结合,又称 论如何正确把EXCEL文件喂给R处理 分为: 1. xlsx包安装及注意事项 2.用vba实现xlsx批量转化csv 以及,这个的对象,针对跟我一样那些从R开始接触编程的,一直以来都是用excel做数据分析的人……编程大牛请轻拍 之所以要研究这个,是因为最近工作上接了个活,要把原来在excel端的报表迁移到R端,自动输出可视化图形,并制作PDF或PPT. 这个活可以分为

VBA学习笔记之VBA学习思路

进阶的知识点 1. SQL查询语句和ADO2. 正则表达式和网抓3. 窗体与控件4. API 类模块 等等 作者:SOROSay链接:https://www.zhihu.com/question/26078625/answer/132542043来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处. 1小时 熟悉数据类型.变量.常量和运算符 1.了解VBA有哪些数据类型 2.知道如何定义变量,了解public/dim/private定义变量时的区别 3.知道如何定义常量

VBA读取文件夹下所有文件夹及文件内容,并以树形结构展示

Const TR_LEVEL_MARK = "+"Const TR_COL_INDEX = "A"Const TR_COL_LEVEL = "E"Const TR_COL_NAME = "C"Const TR_COL_COUNT = "D"Const TR_COL_TREE_START = "F"Const TR_ROW_HEIGHT = 23Const TR_COL_LINE_WIDT

android学习笔记--android启动过程之init.rc文件浅析

1.  init.rc文件结构文件位置:init.c  : /system/core/initinit.rc  : /system/core/rootdir 首先init.rc文件是以模块为单位的,每个模块里的内容都是一起执行的,模块分为3种类型:on.service.import.我们可以看下init.rc文件是怎么写的:1.import import /init.usb.rc import /init.${ro.hardware}.rc import /init.trace.rc 上面的内容

Web 在线文件管理器学习笔记与总结(1)初始文件以及获取首层目录信息

在线文件管理器即使用浏览器管理和操作项目中的目录和文件 文件相关操作包括: 1.创建文件 2.判断文件的权限 3.文件的大小 4.文件的创建时间.修改时间.访问时间 5.查看文件的内容 6.修改文件的内容 7.删除文件 8.重命名文件 9.复制文件 10.剪切文件 11.上传文件 12.下载文件 文件夹相关操作: 1.新建文件夹 2.判断文件夹的权限 3.文件夹的大小 4.文件夹的创建时间.修改时间.访问时间 5.查看文件夹的内容 6.重命名文件夹 7.复制文件夹 8.剪切文件夹 9.文件夹的下

学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中

试验模拟导出Oracle 11G数据库中数据文件坏块中表中的数据 以前一直以为dul对应的版本只能恢复最高的数据库版本一致,今天测试发现dul 10可以恢复11g最新版的数据库.模拟环境 SQL> select * from v$version; BANNER -------------------------------------------------------------------------------- Oracle Database 11g Enterprise Edition

WebServices学习笔记(四)使用services.xml文件发布WebService

四.使用services.xml文件发布WebService 前面发布webservices所建立的java类都不能有包名,这里用配置文件services.xml搭建能有包名的webservice 首先创建MyService类,在service包下 package service; import javax.jws.WebParam; public class MyService { public String getGreeting(@WebParam(name="name")Str

APUE学习笔记:第六章 系统数据文件和信息

6.1 引言 UNIX系统的正常运行需要使用大量与系统有关的数据文件,针对这些数据文件的可移植接口是本章的主题.本章还介绍了系统标识函数.时间和日期函数 6.2 口令文件 UNIX系统的口令文件包含了下列各字段,这些字段包含在<pwd.h>中定义的passwd结构中 用户名 char *pw_name 加密口令 char *pw_passwd 数值用户ID uid_t pw_uid 数值组ID gid_t pw_gid 注释字段 char *pw_gecos 初始工作目录 char *pw_d

C++学习笔记-list遍历

// ConsoleApplication1.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include <iostream> #include <vector> #include <list> #include <deque> #include <string> #include <numeric> #include <algorithm> using n