HI,大家好,我是星光。上期我们聊了SQL常用查询语句中的字段查询,其简化版语法如下:
SELECT 字段名 FROM 表名
当场我就……小声说了,关键字FROM指明了要获取字段信息的表名。倘若数据源是Excel表格,则需要在表名后增加美元符号$,并用中括号包起来,例如[Sheet1$]。
事实上,上述例子是SQL In Excel 对工作表引用最简单的一种情况,也就是整表引用;此外还有单元格区域引用、跨工作簿引用等。
所以咱们今天就再来集中聊一下SQL语句中的Excel表。
▎ 1.区域成表
见下图▼


SELECT 姓名,学科FROM [数据表$A2:D8]
SELECT 姓名,爱好 FROM [学生表$A2:F]
另外,如果我们需要SQL引用计算表格D:G整列的数据,SQL可以写成:
SELECT * FROM [学生表$D:G]
▎ 2.跨工作簿的表

SELECT * FROM[D:\EH小学\学生表.xlsx].[成绩表$]
Sub ADO_SQL()'适用于除2003版以外的高版本ExcelDim cnn As Object, rst As ObjectDim strPath As String, strCnn As String, strSQL As StringDim i As LongSet cnn = CreateObject("adodb.connection")strPath = "D:\EH小学\学生表.xlsx" '指定工作簿strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPathcnn.Open strCnn '创建并打开到指定工作簿的链接strSQL = "SELECT * FROM [成绩表$]" 'strSQL语句,查询成绩表的所有数据Set rst = cnn.Execute(strSQL) '执行strSQLCells.ClearContentsFor i = 0 To rst.Fields.Count - 1Cells(1, i + 1) = rst.Fields(i).NameNextRange("a2").CopyFromRecordset rstcnn.CloseSet cnn = NothingEnd Sub
但更多的情况是,ADO创建的链接是一个工作簿,需要获取的数据在另一个或多个工作簿,例如两个工作簿之间的数据查询统计。此时通常使用的代码如下▼
Sub ADO_SQL2()'适用于除2003版以外的高版本ExcelDim cnn As Object, rst As ObjectDim strPath As String, strCnn As String, strSQL As StringDim i As LongSet cnn = CreateObject("adodb.connection")strPath = ThisWorkbook.FullName '代码所在工作簿的完整名称strCnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & strPathcnn.Open strCnn '创建到代码所在工作簿的链接strSQL = "SELECT * FROM [Excel 12.0;DATABASE=D:\EH小学\学生表.xlsm].[成绩表$]"Set rst = cnn.Execute(strSQL) '执行SQLCells.ClearContentsFor i = 0 To rst.Fields.Count - 1Cells(1, i + 1) = rst.Fields(i).NameNextRange("a2").CopyFromRecordset rstcnn.CloseSet cnn = NothingEnd Sub
SELECT * FROM[Excel 12.0;DATABASE=D:\EH小学\学生表.xlsx].[成绩表$]
示例文件下载,百度网盘..▼
https://pan.baidu.com/s/1tVhYyLg2CPDD5EBDoN_vKg
提取码: et58
文章转载自VBA编程学习与实践,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




