|
在如何在vba中用ado訪問各種不同的數(shù)據(jù)源? 一文中我們介紹了用ado訪問excel數(shù)據(jù)源的方法。 但是我們經(jīng)常需要訪問的數(shù)據(jù)位于多個不同的文件中,這時候可以采用如下的步驟:
Sub QQ1722187970()
Dim oRecrodset
Dim oConStr
Dim sSql As String
Dim oWk As Worksheet
Dim sConStr As String
Dim oWB As Workbook
Set oWk = Excel.ThisWorkbook.Worksheets.Add
Dim sPath As String
sPath = Excel.ThisWorkbook.Path
sKC = VBA.Dir(sPath & "\*庫存*.xls*", vbNormal)
sXs = VBA.Dir(sPath & "\*銷售*.xls*", vbNormal)
Set oWB = Excel.Workbooks.Open(sPath & "\" & sKC)
Set oWk1 = oWB.Worksheets(1)
sKCName = oWk1.Name
oWB.Close
set oWB = Excel.Workbooks.Open(sPath & "\" & sXs)
Set oWk1 = oWB.Worksheets(1)
sXsname = oWk1.Name
oWB.Close
sVersion = Excel.Application.Version
If sVersion <= 12 Then
sConStr = "Provider='Microsoft.Jet.OLEDB.4.0';Data Source=" & Excel.ThisWorkbook.FullName & ";Extended Properties='Excel 8.0;HDR=YES;MAXSCANROWS=16'"
Else
sConStr = "Provider='Microsoft.ACE.OLEDB.12.0';Data Source=" & Excel.ThisWorkbook.FullName & ";Extended Properties='Excel 12.0;HDR=YES;MAXSCANROWS=16'"
End If
Debug.Print sConStr
Set oConStr = CreateObject("ADODB.Connection")
'使用Connection連接數(shù)據(jù)源,并用Execute方法執(zhí)行對應的SQL語句生成Recrodset對象
oConStr.Open sConStr
'在SQL語句中連接外部數(shù)據(jù)源的標準語法
sSql = "select a.商品名稱 as 商品名稱,a.規(guī)格名稱 as 規(guī)格,b.銷售數(shù)量 as 銷售數(shù)量,a.實際庫存 as 實際庫存 from [Excel 12.0;Database=" & sPath & "\" & sKC & "].[" & sKCName & "$] as a,[Excel 12.0;Database=" & sPath & "\" & sXs & "].[" & sXsname & "$] as b where a.商品編碼=b.商品編碼"
Debug.Print sSql
Set oRecrodset = oConStr.Execute(sSql)
With oRecrodset
'循環(huán)導入字段名
For i = 1 To .Fields.Count
oWk.Cells(1, i) = .Fields(i - 1).Name
Next
oWk.Cells(2, 1).CopyFromRecordset oRecrodset
End With
Set oRecrodset = Nothing
End Sub
如果用的是Microsoft.Jet.OLEDB.4.0,則需要使用”[Excel 8.0;Database=”這樣的形式訪問外部的數(shù)據(jù)源。 如果用的是Microsoft.ACE.OLEDB.12.0,則推薦使用”[Excel 12.0;Database=”這樣的形式訪問外部的數(shù)據(jù)源。 |
|
|