我想用VBA JOIN查询excel.Below是我的代码和表。请指导我如何使用相同的。
第一表-
第二表-
VBA代码:-
Sub SQL()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
strFile = ThisWorkbook.FullName
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile _
& ";Extended Properties=""Excel 12.0;HDR=Yes;IMEX=1"";"
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open strCon
strSQL = "SELECT * FROM [Sheet3$] FULL OUTER JOIN [Sheet2$] ON [Sheet2$].[Sr]=[Sheet3$].[Sr]"
rs.Open strSQL, cn
Sheet5.Range("D1").CopyFromRecordset rs
End Sub
在上面的代码中,我得到了下面的错误。
发布于 2017-10-30 19:22:57
我不确定您当前的错误实际上是由查询引起的。但MS Access不支持FULL OUTER JOIN
。但是,您可以使用包含两个查询的UNION
来模拟它:
SELECT s1.col1, s1.col2
FROM [Sheet3$] s1
LEFT JOIN [Sheet2$] s2
ON s1.[Sr] = s2.[Sr]
UNION ALL
SELECT s2.col1, s2.col2
FROM [Sheet2$] s1
LEFT JOIN [Sheet3$] s2
ON s1.[Sr] = s2.[Sr]
我随意地从Sheet3$
中选择了两列,分别称为col1
和col2
。您可以自由地选择所需的任何列,但我建议您不要使用SELECT *
,因为它通常会使您的代码在以后的某个时刻容易崩溃。相反,只需选择您显式需要的列。
发布于 2017-10-30 19:36:32
查询#1:
strSQL = "SELECT a.* ,b.* FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]"
查询#2:
strSQL = "SELECT a.* ,b.Family FROM [Sheet2$] as a LEFT JOIN [Sheet3$] as b ON a.[Sr]=b.[Sr]"
发布于 2017-10-30 21:14:47
ADODB不支持完全外连接,但是如果去掉重复项,表A的外连接表B等同于TableA LEFT JOIN TableB UNION TableB Left JOIN表A。所以
select DISTINCT * from (select col1 From TableA LEFT Join TableB ON TableA.sr = TableB.sr Union Select col1 from TableB Left Join表A ON TableB.sr = TableA.sr)
将模仿一个完整的外部
https://stackoverflow.com/questions/47013940
复制相似问题