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

【分享成果,随喜正能量】不要跟那些牙尖嘴利的人计较,过得好的人,都在忙着享受生活呢,过得不好又心眼儿脏的人,才巴望别人也一样不如意,才试图用自己的刻薄,削去别人的幸福感。别理这些人,好好爱自己。 ​​

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

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

第三十五讲 用ADO,实现EXCEL多个工作表数据的汇总

大家好,今日我们继续讲解VBA数据库解决方案,今日讲解第35讲:利用ADO,实现EXCEL多个工作表数据的汇总。在前几讲中,我们讲了用ADO连接EXCEL实现一些便捷操作的方法,其实,这些操作中是把EXCEL作为一种特殊的数据库来对应的,我们在实际工作中面临的实际情况多种多样,要实现特殊的操作有时要组合利用一些基本的方法。

1 应用场景的具体分析

我们今日讲解的是利用ADO,实现EXCEL多个工作表数据的汇总,模拟的场景是某个工作薄中有若干个工作表,我们要把这些工作表的数据一次提取出来,放在当前的工作表内。如下面的截图;为文件“16年.xlsx” 的数据记录,一共有4个工作表,每个工作表中的记录各不相同:

2 将多工作表数据汇总到一个工作表中的代码及代码解读

为了实现各个工作表中的数据都汇总到同一个工作表中,我们看下面的代码:

Sub mynz_35()

'第35讲,利用ADO,实现EXCEL多个工作表数据的汇总

Dim cnADO, rsADO As Object

Dim strPath, strTable, strSQL As String

Dim SH As Worksheet

ThisWorkbook.ActiveSheet.Cells.ClearContents

Set cnADO = CreateObject("ADODB.Connection")

'建立连接

strPath = ThisWorkbook.Path & "" & "16年.xlsx"

Workbooks.Open strPath

cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;hdr=no;imex=1';data source=" & strPath

For Each SH In Worksheets

r = r + 1

strTable = "[" & SH.Name & "$]"

strSQL = "select * from " & strTable

If r = 1 Then

ThisWorkbook.ActiveSheet.Range("a65536").End(xlUp).CopyFromRecordset cnADO.Execute(strSQL)

Else

ThisWorkbook.ActiveSheet.Range("a65536").End(xlUp).Offset(1, 0).CopyFromRecordset cnADO.Execute(strSQL)

End If


Next

Workbooks("16年").Close

cnADO.Close

Set cnADO = Nothing

End Sub

代码截图:

代码讲解:

1) Workbooks.Open strPath 这里要打开这个文件,以便提取每个工作表的数据,如果不打开时下面的FOR EACH会报错。

2) strTable = "[" & SH.Name & "$]"

strSQL = "select * from " & strTable

上述代码是嵌套在for each 循环中,先提取每个工作表的名字,然后建立SQL可执行的语句。

3) ThisWorkbook.ActiveSheet.Range("a65536").End(xlUp).Offset(1, 0).CopyFromRecordset cnADO.Execute(strSQL)

将数据提取处来放到当前的工作表中,这处是执行了一个SQL语句。

4) Workbooks("16年").Close 关闭这个文件。这处可以用Workbooks("16年").Close(false),较好。

下面看我们代码的执行过程。点击运行按钮:

这样就实现了我们的目的:多个工作表的数据汇总,不足之处就是日期无法放出了。

今日内容回向:

1 如何实现多个工作表的汇总?

2 为啥要先打开这个文件呢?

3 如要要实现日期的放出来,有什么方法呢?

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

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

【分享成果,随喜正能量】在平凡的岁月当中,守护一份天真,守护一份纯真,耐心经过,内敛沉稳。不管发生什么事。