咔片PPT · AI自动生成演示文稿,模板丰富、排版精美 讯飞智文 · 一键生成PPT和Word,高效应对学习与办公

【分享成果,随喜正能量】人前留一线,日后好相见。得饶人处且饶人,宽恕不是让别人痛快,更是让自己舒服。 ​​

《VBA数据库解决方案》教程是我推出的第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。

这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第37讲:ADO实现多个EXCEL工作表的数据提取

第三十七讲 同一文件夹下多个EXCEL工作表的数据提取

大家好,今天继续讲解《VBA数据库解决方案》,今日讲解的是第37讲,利用ADO,实现同一文件夹下多个EXCEL工作表的数据提取。最近的内容实用性比较强,如今日的内容,只把需要汇总的EXCEL文件放在同一个文件夹下,而且格式一致,那么利用ADO汇总这几个文件的数据是非常快的,这讲的内容和第32讲的内容是类似的,不过第32讲的内容是要事先知道文件的名称,然后建立一个数组来分别对应每个文件,通过循环来实现从每个文件中提取数据的目的,本讲的内容是事先不知道每个文件的名称。

1 应用场景的具体分析

实例:在一个文件夹下有若干个文件,如下图:

我们现在,需要把上面的文件夹中除了“VBA与数据库操作”之外的各个文件的内容一次性汇总出来,这个VBA程序该如何写呢?

2 同一文件夹下多个未知EXCEL工作表数据提取的代码及代码解读

代码如下:

Sub mynz_37()

'第37讲,利用ADO,实现同一文件夹下EXCEL工作表数据的汇总

[ 代码见教程]

End Sub

代码截图:

代码讲解:

1) Z = Dir(ThisWorkbook.Path & "*.xlsx") 其中DIR函数用来指定文件名的字符串表达式,可能包含目录或文件夹、以及驱动器。如果没有找到 pathname,则会返回零长度字符串 ("")。

2) strPath = ThisWorkbook.Path & "" & Z

strTable = "[sheet1$A2:h65536]"

上述代码分别给出了文件的路径名称和数据表的范围,数据的范围是sheet1工作表除去表头后的全部$A2:h65536.

3) strSQL = "select F1,F2,F3,F4,F5 from " & strTable

Range("A" & x).CopyFromRecordset cnADO.Execute(strSQL)

建立连接后把需要的数据拷贝出来,需要的数据是第1列,第2列,第3列,第4列 ,第5列

4) x = Range("b65536").End(xlUp).Row 下次复制的位置确定.

5) Z = Dir

  • 特别注意:第一次调用 Dir 函数时,必须指定 pathname,否则会产生错误。如果也指定了文件属性,那么就必须包括 pathname。Dir 会返回匹配 pathname 的第一个文件名。若想得到其它匹配 pathname 的文件名,再一次调用 Dir,且不要使用参数。如果已没有合乎条件的文件,则 Dir 会返回一个零长度字符串 ("")。一旦返回值为零长度字符串,并要再次调用 Dir 时,就必须指定 pathname,否则会产生错误。不必访问到所有匹配当前 pathname 的文件名,就可以改变到一个新的 pathname 上。但是,不能以递归方式来调用 Dir 函数。以 vbDirectory 属性来调用 Dir 不能连续地返回子目录。由于文件名并不会以特别的次序来返回,所以可以将文件名存储在一个数组中,然后再对这个数组排序。
  • 上述的Z=dir 就是实现的下一个文件名的调用。

下面看运行的结果:点击运行按钮:

所有数据汇总后再输出到A到E列.

今日内容回向:

1 在不知道文件名和文件个数的前提下,如何汇总文件?

2 DIR函数的意义是否理解?

本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm

我20多年的VBA实践经验,全部浓缩在下面的各个教程中:

【分享成果,随喜正能量】世界上最不开心的人,就是那些最在意别人看法的人。拿得起是生存,放得下是生活;拿得起是能力,放得下是智慧。有的人拿不起,也就无所谓放下;有的人拿得起,却放不下。拿不起,就会庸庸碌碌;放不下,就会疲惫不堪。只有放下那些无谓的负担,才能一路潇洒前行。