专业的编程技术博客社区

网站首页 > 博客文章 正文

ADO提取多个EXCEL工作表数据(如何提取多个excel文件的数据)

baijin 2024-08-12 13:57:35 博客文章 12 ℃ 0 评论

【分享成果,随喜正能量】珍惜自己生活当中的一点一滴,好好积攒自己的福,不贪婪,不消耗,懂得惜福,才是大智慧。

《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实践经验,全部浓缩在下面的各个教程中:

【分享成果,随喜正能量】不为迎合他人,去做自己不喜欢做的事,选择一种既不用违背本心、降低人格去刻意讨好,又让人觉得舒服、容易接受的社交风格。为了迎合别人而违背自己本心的社交关系,往往是难以维系的。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表