VBA使用SQL語句檢索Excel數據


把Excel當做數據庫,用ActiveX Data Objects打開連接並使用Select語句來查詢數據,效率要比Workbook.Open和Range().Value效率高的多。

下面來看以個例子:

Sub ExeSQL()

   ' 引用Microsoft ActiveX Data Objects 2.5

   ' 引用Microsoft Scripting Runtime

   Dim conn As New ADODB.Connection

   Dim rs As New ADODB.Recordset

   Dim fs As New FileSystemObject

   Dim extenName$, connStr$, sqlStr$

   extenName = fs.GetExtensionName(ThisWorkbook.FullName) ' 文件擴展名

   If extenName = "xls" Then '03

      connStr = "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;" & _

        "Data Source=" & ThisWorkbook.FullName

   ElseIf extenName = "xlsx" Then '07

      connStr="Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;" & _

        "Data Source=" & ThisWorkbook.FullName

   End If

   Set fs = Nothing

   sqlStr = "select x.來源,x.訪問次數,x.訂單總數,y.成功交易量,y.銷售額" & _

            " from [訂單表$] as x inner join [收入表$] as y" & _

            " on x.來源=y.來源"

   conn.Open connStr

   Set rs = conn.Execute(sqlStr)

   Sheets("新表").Range("A2").CopyFromRecordset rs

   ' Sheets("新表").Range("A2").CopyFromRecordset conn.Open(connStr)

   Set rs = Nothing: conn.Close: Set conn = Nothing

End Sub

說明:

1、數據庫的ConnectionString(連接字符串)的獲取,我推薦一個網址:www.connectionstring.com/;

2、ConnectionString里的DataSource(數據源)是ThisWorkbook.FullName(本工作薄);

3、Excel作為數據源時,默認工作表的第一行為字段;

3、本工作薄里面有“訂單表”、“收入表”和“新表”三個表,第一行(字段)分別為[來源],[訪問次數],[...]等。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM