之前的100多篇文章,解決案例的大部分手段,均為數組、字典或數組與字典的組合,估計大家都看膩了。今天開始更新使用SQL語句的文章。注意SQL語句貌似只能在Excel裡面使用,不能在WPS裡面使用。如果有其它方法讓SQL在wps裡運行,也歡迎大家留言補充。
源數據:
查詢內容:
問題描述:
1:通過SQL語句,獲取表格中 條碼、倉位、貨號的數據;
解決的思路詳解:
SQL的核心語句
Sql = "SELECT 條碼,倉位,貨號 FROM [商品信息目錄$] ";
代碼運行的結果如下:
代碼如下:
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行 代碼為通用語句。