【分享成果,随喜正能量】不要跟那些牙尖嘴利的人计较,过得好的人,都在忙着享受生活呢,过得不好又心眼儿脏的人,才巴望别人也一样不如意,才试图用自己的刻薄,削去别人的幸福感。别理这些人,好好爱自己。
《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实践经验,全部浓缩在下面的各个教程中:
【分享成果,随喜正能量】在平凡的岁月当中,守护一份天真,守护一份纯真,耐心经过,内敛沉稳。不管发生什么事。