前景提要
要进行工作簿数据的合并,常规操作第一步都是去打开工作簿,这个一点都没有问题
在之前学习工作簿的合并的时候,我们也是经常这样操作,惯用的代码就是workbook.open
但是打开工作簿也有一个弊端,那就是会花费时间去等待工作簿的打开
比方说上面这个图片,你可能要花点时间去等待他的启动,这就会浪费我们不少的时间
如果能够跳过这个过程,那执行整个程序的速度就会快上很多
那么如何跳过呢?
这就是我们今天的重点了
场景说明
这是我们今天的工作场景,我们需要将当前文件夹内所有的工作簿中,姓名为A1的人的成绩全部汇总到一个工作簿中
当然还是在不打开工作簿的前提下来完成的,那么如何实现这样的效果呢
这里我们会接触到一个新知识点,就是SQL
代码区
Sub tssss()
Dim sth As Worksheet, sql As String
Set sth = ActiveSheet
Set conn = CreateObject("adodb.connection") '创建ado对象
Set Rst = CreateObject("ADODB.recordset") '创建记录集
pathn = ThisWorkbook.Path
f = Dir(pathn & "\")
Do While f <> ""
l = Cells(Rows.Count, 1).End(xlUp).Row
If f <> "5-22.xlsm" Then
k = k + 1
sql = "Select * from [Sheet1$] Where 姓名= 'A1'"
With ActiveSheet
conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/" & f
Set Rst = conn.Execute(sql)
If k = 1 Then
For i = 0 To Rst.Fields.Count - 1
.Cells(1, i + 1) = Rst.Fields(i).Name
Next i
.Cells(2, 1).CopyFromRecordset conn.Execute(sql)
Else
.Cells(l + 1, 1).CopyFromRecordset conn.Execute(sql)