大家好,今日我们继续讲解VBA数据库解决方案,今日讲解第35讲:利用ADO,实现EXCEL多个工作表数据的汇总。在前几讲中,我们讲了用ADO连接EXCEL实现一些便捷操作的方法,其实,这些操作中是把EXCEL作为一种特殊的数据库来对应的,我们在实际工作中面临的实际情况多种多样,要实现特殊的操作有时要组合利用一些基本的方法。
我们今日讲解的是利用ADO,实现EXCEL多个工作表数据的汇总,模拟的场景是某个工作薄中有若干个工作表,我们要把这些工作表的数据一次提取出来,放在当前的工作表内。如下面的截图;为文件"16年.xlsx" 的数据记录,一共有4个工作表,每个工作表中的记录各不相同:
为了实现各个工作表中的数据都汇总到同一个工作表中,我们看下面的代码:
Sub mynzexcels_4()
'第35讲,利用ADO,实现EXCEL多个工作表数据的汇总
Dim cnADO, rsADO As Object
Dim strPath, strTable, strSQL As String
Dim SH As Worksheet
ThisWorkbook.ActiveSheet.Cells.Clear
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
strTable = "[" & SH.Name & "$]"
strSQL = "select * from " & strTable
ThisWorkbook.ActiveSheet.Range("a65536").End(xlUp).Offset(1, 0).CopyFromRecordset cnADO.Execute(strSQL)
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 为啥要先打开这个文件呢?