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文件


分享到:


相關文章: