【分享成果,随喜正能量】珍惜自己生活当中的一点一滴,好好积攒自己的福,不贪婪,不消耗,懂得惜福,才是大智慧。
《VBA数据库解决方案》教程是我推出的第二套教程,目前已经是第一版修订了。这套教程定位于中级,是学完字典后的另一个专题讲解。数据库是数据处理的利器,教程中详细介绍了利用ADO连接ACCDB和EXCEL的方法和实例操作,教程第一版的修订内容主要是完成所有程序文件的32位和64位OFFICE系统测试。
这套教程共两册,八十四讲,今后一段时间会给大家陆续推出修订后的教程内容。今日的内容是第32讲:ADO提取多个EXCEL工作表数据
第三十二讲 利用ADO,实现多个EXCEL工作表数据提取
大家好,今日讲解VBA数据库解决方案的第32讲,利用ADO,秒杀实现多个EXCEL工作表的数据的提取。我曾经讲过:学以致用,如果我们学习了,没有利用,那么知识永远是知识,无法转换为我们实际的成果。所以我的资料中无论是《VBA代码解决方案》还是《VBA数据库解决方案》都在力求实用,把学到的知识放在实用之中。
到今天这讲,我们讲了30余讲的数据库相关的知识,大家一定对于连接,打开数据库不陌生了,今日我们给大家讲解利用ADO连接到EXCEL的方法,从而实现多个EXCEL数据汇总到一个文件中的方法。这讲的作用非常大,可以给很多的数据统计人员打开思路,工作中还望多多利用。
1 应用场景的具体分析实例:我们有三个EXCEL数据表格,文件是07版本的,记录的是16年到18年的某项数据记录,我们要把这些数据表A列除去第一行的数据汇总到当前的同一个EXCEL表格中,同时把第一行的数据换成16年、17年、18年。估计大家看到我的这个实例,会联想到很多自己工作中的例子吧,我给出的这个三个源数据的文件及内容如下:
16年数据:
17年数据:
18年数据:
要实现我们的目的,如果按照正常的VBA操作,我们要逐个打开这三个文件,然后利用循环语句,把这些数据提取处理,这样的处理当然可以,我们今天要讲的是利用ADO实现我们的目的。
2 实现多个EXCEL工作表的数据提取的代码及代码分析代码如下:
Sub mynz_32() '第32讲,利用ADO,秒杀实现多个EXCEL工作表的数据提取
[代码见教程]
End Sub
代码截图:
代码讲解:
1)
arr = Array("16年", "17年", "18年") 建立一个数组用来放三个文件的名字
2)
For i = 0 To UBound(arr)
strPath = ThisWorkbook.Path & "\" & arr(i) & ".xlsx"
strTable = "[sheet1$]"
'建立连接
cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;hdr=no;imex=1';data source=" & strPath
strSQL = "select F1,F2,F3,F4,F5 from " & strTable
Cells(t, 1).CopyFromRecordset cnADO.Execute(strSQL)
cnADO.Close
Next i
先后建立三次连接,连接到这三个EXCEL文件。其中Cells(i, 1).CopyFromRecordset cnADO.Execute(strSQL) 语句是拷贝出数据,strSQL = "select F1,F2,F3,F4,F5 from " & strTable 是指从工作表中取的是第A,B,C,D,E列的数据。
下面看代码的执行:
今日内容回向:
1 如何处理多工作表的数据汇总?
2 ADO如何连接到EXCEL文件?
本讲内容参考程序文件:VBA与数据库操作(第一册).xlsm
我20多年的VBA实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】不为迎合他人,去做自己不喜欢做的事,选择一种既不用违背本心、降低人格去刻意讨好,又让人觉得舒服、容易接受的社交风格。为了迎合别人而违背自己本心的社交关系,往往是难以维系的。
,