请考虑使用ADO的以下示例.该代码允许从单个SQL查询(Jet SQL)中的多个数据源获取数据,特别是从.xlsx文件中生成联合,并将结果记录集放入工作表.遗憾的是,我没有可用的Oracle数据源进行测试,但您也可以通过Oracle ODBC驱动程序与ADO(与任何其他数据库一样)直接连接到Oracle .
代码放在Query.xlsm:
Option Explicit
Sub SqlUnionTest()
Dim strConnection As String
Dim strQuery As String
Dim objConnection As Object
Dim objRecordSet As Object
strConnection = _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"User ID=Admin;" & _
"Data Source='" & ThisWorkbook.FullName & "';" & _
"Mode=Read;" & _
"Extended Properties=""Excel 12.0 Macro;"";"
strQuery = _
"SELECT * FROM [Sheet1$] " & _
"IN '" & ThisWorkbook.Path & "\Source1.xlsx' " & _
"[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
"UNION " & _
"SELECT * FROM [Sheet1$] " & _
"IN '" & ThisWorkbook.Path & "\Source2.xlsx' " & _
"[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
"UNION " & _
"SELECT * FROM [Sheet1$] " & _
"IN '" & ThisWorkbook.Path & "\Source3.xlsx' " & _
"[Excel 12.0;Provider=Microsoft.ACE.OLEDB.12.0;Mode=Read;Extended Properties='HDR=YES;'] " & _
"ORDER BY ContactName;"
Set objConnection = CreateObject("ADODB.Connection")
objConnection.Open strConnection
Set objRecordSet = objConnection.Execute(strQuery)
RecordSetToWorksheet Sheets(1), objRecordSet
objConnection.Close
End Sub
Sub RecordSetToWorksheet(objSheet As Worksheet, objRecordSet As Object)
Dim i As Long
With objSheet
.Cells.Delete
For i = 1 To objRecordSet.Fields.Count
.Cells(1, i).Value = objRecordSet.Fields(i - 1).Name
Next
.Cells(2, 1).CopyFromRecordset objRecordSet
.Cells.Columns.AutoFit
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
注意,ThisWorkbook.Path不应该包含'在路径中.否则,您必须通过更换逃脱他们'用''.
此外,在同一文件夹中有三个数据源文件Query.xlsm.
Source1.xlsx:
Source2.xlsx:
Source3.xlsx:
生成的工作表如下:
它适用于我的64位版Excel 2013.为了使其与兼容.xls和Excel 2003(其中提供商ACE.OLEDB.12.0未安装),必须更换Provider=Microsoft.ACE.OLEDB.12.0;同Provider=Microsoft.Jet.OLEDB.4.0;,而且在扩展属性Excel 12.0 Macro;/ Excel 12.0;带Excel 8.0;.您可以轻松地将WHERE子句和其他SQL内容添加到查询中.实际上,连接对象的数据源不限于Query.xlsm代码所在的唯一文件.它可以是另一个数据源,与其中一个可用的提供程序兼容,可以是基于文件的,也可以是基于服务器的.在http://www.connectionstrings.com/上查找数据源的更多连接字符串
| 归档时间: |
|
| 查看次数: |
5893 次 |
| 最近记录: |