Excel VBA 5.22 不打开工作簿也可以合并数据!

一起学习,一起进步~~

要进行工作簿数据的合并,常规操作第一步都是去打开工作簿,这个一点都没有问题

在之前学习工作簿的合并的时候,我们也是经常这样操作,惯用的代码就是workbook.open

但是打开工作簿也有一个弊端,那就是会花费时间去等待工作簿的打开

比方说上面这个图片,你可能要花点时间去等待他的启动,这就会浪费我们不少的时间

如果能够跳过这个过程,那执行整个程序的速度就会快上很多

那么如何跳过呢?

这就是我们今天的重点了

场景说明

这是我们今天的工作场景,我们需要将当前文件夹内所有的工作簿中,姓名为A1的人的成绩全部汇总到一个工作簿中

当然还是在不打开工作簿的前提下来完成的,那么如何实现这样的效果呢

这里我们会接触到一个新知识点,就是SQL

代码区

Sub tssss()Dim sth As Worksheet, sql As StringSet sth = ActiveSheetSet conn = CreateObject("adodb.connection") '创建ado对象Set Rst = CreateObject("ADODB.recordset") '创建记录集pathn = ThisWorkbook.Pathf = Dir(pathn & "\")Do While f <> ""l = Cells(Rows.Count, 1).End(xlUp).RowIf 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)        End If    End With    conn.CloseEnd Iff = Dir()LoopEnd Sub

看看效果

可以看到整个过程很快的,屏幕都没有闪动,就已经完成了数据的汇总了。

相较于之前我们看到的通过workbook.open方法来汇总数据,效率提升了很多。

代码解析

那我们来学习下今天的代码

前面我们说了,今天会引入一个新的知识点,就是SQL

相信对于很多小伙伴来说,SQL并不算是太陌生的东西,毕竟很多编程语言都会使用到SQL

让大家感觉到吃惊的,应该就是在VBA中居然可以使用SQL

其实Excel 也是支持SQL的,这点从Excel能够导入数据库文件和关联数据库文件就能够知道,那么进入正题,VBA中如何使用SQL呢?

Set conn = CreateObject("adodb.connection") '创建ado对象 Set Rst = CreateObject("ADODB.recordset") '创建记录集

老规矩,你既然在VBA中使用了不属于VBA的东西,那么你肯定要申明一下了,如何申明,就是上面这两个代码

那么SQL最重要的核心是什么呢?SQL语句

sql = "Select * from [Sheet1$] Where 姓名= 'A1'"

就是他

和普通的SQL语句并没有太大的差异。

但是这里有两点需要注意

第一点

注意,这里一定要有[],[]里面的名称要和我们要汇总的数据源的工作表的名称保持一致,这一点一定要注意

还有就是工作表的名称后面一定要加上一个$,这一点也不能少,不要SQL语句就没有办法执行了。

第二点

留意A1前后要有引号,代表是一个文本,这一点也不能忽略

有了SQL语句之后,我们还需要告诉SQL一个事情,去哪里执行?执行打开什么样的文件

conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;extended properties=excel 12.0;data source=" & ThisWorkbook.Path & "/" & f Set Rst = conn.Execute(sql)

就是他们两个。虽然看起来比较长,但是也是模块化的东西,直接套用就好

有了这些信息之后就可以执行SQL语句了。

剩下的都是套路的操作啦。

最终将结果写入对应的单元格即可

.Cells(l + 1, 1).CopyFromRecordset conn.Execute(sql)

写入的代码就是他

====================

本节课的案例源码已经上传,需要的小伙伴后台私信“5-22”,希望大家多支持~~,多多关注 ~ ~

好了,明晚21:00,准时再见!


因为公众号没有留言功能(开的比较晚),所以建立一个线下微信群,主要为大家提供一个交流的平台,同时大家也可以提一些对公众号的意见和看法,大家一起学习,一起进步。


(0)

相关推荐