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

大家好,今日我们继续讲解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 为啥要先打开这个文件呢?