下面我们看我给出的代码: Sub mynzRecords_60() '第60讲 右外联接(工作表) Dim cnADO As Object, rsADO As Object Dim strPath As String, strSQL As String Worksheets("60").Select '清空工作表 Cells.ClearContents '建立连接 Set cnADO = CreateObject("ADODB.Connection") Set rsADO = CreateObject("ADODB.Recordset") '给出连接路径 strPath = ThisWorkbook.FullName '打开连接 cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 12.0;hdr=yes;imex=1';data source=" & strPath '右外连接的SQL语句 strSQL = "Select a.型号,a.生产厂,a.数量,b.供应商 From [数据$] as a RIGHT JOIN [数据2$] as b ON a.型号=b.型号" '打开记录集 rsADO.Open strSQL, cnADO, 1, 3 '提取表头数据 For i = 1 To rsADO.Fields.Count Cells(1, i) = rsADO.Fields(i - 1).Name Next '提取数据 Range("a2").CopyFromRecordset rsADO '关闭记录集连接,释放内存 rsADO.Close cnADO.Close Set rsADO = Nothing Set cnADO = NothingEnd Sub 代码截图: 代码解读:1) '右外连接的SQL语句strSQL = "Select a.型号,a.生产厂,a.数量,b.供应商 From [数据$] as a RIGHT JOIN [数据2$] as b ON a.型号=b.型号"大家或许注意到了,上面的语句中我只是把左外连接中的LEFT 改为了RIGHT, 修正是非常的简单,但是返回的结果两者大不相同。2) '提取表头数据 For i = 1 To rsADO.Fields.Count Cells(1, i) = rsADO.Fields(i - 1).NameNext上述代码我给出的注释是提出表头数据,其实就是建立起来的rsADO连接的Fields的名称,也就是字段名。 下面看代码的运行结果;今日内容回向:1 什么是右外连接?它的特点是什么?2 右外连接的SQL语句如何写? 本讲内容参考程序文件:VBA与数据库操作(第二册).xlsm 我20多年的VBA实践经验,全部浓缩在下面的各个教程中: 【分享成果,随喜正能量】一切诸法皆如幻,本性自空那用除。若识心性非形象,湛然不动自真如。。