【发布时间】:2018-10-24 19:03:52
【问题描述】:
我相信我也可以通过宏来做到这一点,但我想介绍一下 VBA 中的 ADODB 和 SQL 查询。数据集不在 Access 中,而是在单独的工作簿中,两个工作簿的 SQL 查询如下:
SELECT getRollpHierRpt.Field1, ['App].[Master Book Name], ['App].[App Book Name], ['App].[Secondary App Book Name], ['App].[App Code], ['App].[App Book Status], ['App].[Book Transit], ['App].[Transit Desc], ['App].[Legal Entity Id], ['App].[Legal Entity Desc]
FROM ['App] INNER JOIN getRollpHierRpt ON ['App].[Book Transit] = getRollpHierRpt.Field1;
我在互联网上看到的示例包括连接到 Access/SQL 服务器,但如果数据集是两个 excel 工作簿?
Sub MergeIt()
Dim conn1 As New ADODB.Connection
Dim conn2 As New ADODB.Connection
With conn1
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Users\amzubaid\Desktop\Practice Merging\13-10-2017.xlsm;" &
"Extended Properties=""Excel 12.0 Macro;HDR=YES';IMEX=1"""
.Open
End With
With conn2
.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data
Source=C:\Users\amzubaid\Desktop\Practice Merging\20181015-Practice.xlsm;" & "Extended Properties=""Excel 12.0 Macro;HDR=YES';IMEX=1"""
.Open
End With
Dim rsSmall As New Recordset
rsSmall.Open "select [Field1] from [getRollpHierRpt$]", conn1
Dim r As Range
Dim rsBig As New Recordset
Do
Set r = Range("a" & Rows.Count).End(xlUp).Offset(1, 0) 'first unoccupied cell
rsBig.Open "select [App Code],[Legal Entity Desc]," & rsSmall("Field1") & "
As GetRollPH from [getRollpHierRpt$] where [BookTransit] = " &
rsSmall("Field1"), conn2
r.CopyFromRecordset rsBig
rsBig.Close
rsSmall.MoveNext
Loop Until rsSmall.EOF 'end if file
rsSmall.Close
conn1.Close
conn2.Close
End Sub
【问题讨论】: