VBA+ADO+SQL语句,小试牛刀。

之前的100多篇文章,解决案例的大部分手段,均为数组、字典或数组与字典的组合,估计大家都看腻了。今天开始更新使用SQL语句的文章。注意SQL语句貌似只能在Excel里面使用,不能在WPS里面使用。如果有其它方法让SQL在wps里运行,也欢迎大家留言补充。

源数据:

VBA+ADO+SQL语句,小试牛刀。

查询内容:

VBA+ADO+SQL语句,小试牛刀。

问题描述:

1:通过SQL语句,获取表格中 条码、仓位、货号的数据;

解决的思路详解:

SQL的核心语句

Sql = "SELECT 条码,仓位,货号 FROM [商品信息目录$] ";

代码运行的结果如下:

VBA+ADO+SQL语句,小试牛刀。

代码如下:

VBA+ADO+SQL语句,小试牛刀。

SQL语句汇总,查询获取多列的数据,SQL语句如下:

SELECT 列字段名1,列字段名2,列字段名3 FROM [工作表名称$]

注意事项: 1.在SQL语句中SQL语句英文不区分大小写,但标点符号必须是英文半角状态下输入,字段名也必须跟原来的一样。

2.使用SQL语句的时候,必须避免列字段中使用下面的特殊字符:

空格、双引号(")、撇(')、数字标记(#)、百分号(%)、大于号(>)、小于号(

如果在源数据表的列字段使用了这些特殊字符,那么在使用SQL语句列出各字段的数据时,就会发生错误。为了规范使用SQL语句,在对数据源字段命名时,尽量避免使用这些特殊字符。

Sub DoSql_Execute()
 Dim cnn As Object, rst As Object
 Dim Mypath As String, Str_cnn As String, Sql As String
 Dim i As Long
 Set cnn = CreateObject("adodb.connection")
 '以上是第一步,后期绑定ADO
 
 Mypath = ThisWorkbook.FullName
 '以上获取当前工作簿的路径及名称
 
 If Application.Version < 12 Then
 '格式为.xls,调用下述语句
 Str_cnn = "Provider=Microsoft.jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & Mypath
 Else
 '格式为.xlsx,调用下述语句
 Str_cnn = "Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;Data Source=" & Mypath
 End If
 cnn.Open Str_cnn
 '判断一下当前Excel的版本,12.0以下使用“Provider=Microsoft.Jet.Oledb.4.0”,以上使用“Microsoft.ACE.OLEDB.12.0”
 '以上是第二步,建立链接
 '
 Sql = "SELECT 条码,仓位,货号 FROM [商品信息目录$] "
 'Sql语句,查询商品信息目录表中条码,仓位,货号的数据
 [a2:c1000].ClearContents
 '清空[a2:c1000]区域内容
 Range("a2").CopyFromRecordset cnn.Execute(Sql)
 'Execute语句先执行SQL语句
 '使用单元格对象的CopyFromRecordset方法将SQL查询到的内容复制到D2单元格为左上角的单元格区域
 '以上是第三步,执行SQL语句并将数据读入表格指定区域
 cnn.Close
 '关闭链接
 Set cnn = Nothing
 '释放内存
End Sub

代码解析:

本例代码,基本都有注释,所以简单的说明一下:

1:5~18行 语句为通用语句,其它表格运用,可以直接复制此代码;

2:21行 SQL语句,根据不同的查找内容,进行设置;

3:25行 用单元格对象CopyFromRecordset复制 SQL查询到的内容;但是CopyFromRecordset方法,不会返回列头和列表。返回列头和列表的方法,明天再更新。

4:29~31行 代码为通用语句。

点击关注可以更方便的查看Excel VBA的案例文章

私信 视频 可以获取54集VBA入门视频

私信 VBA或 vba 可以获取文章中含VBA代码的Excle文件


分享到:


相關文章: