分享

VBA数据库解决方案第47讲:在两个工作表提取数据记录,并显示相同记录的报告

 xfzxlgs 2022-06-23 发布于江西

大家好,今日继续VBA数据库解决方案的讲解,今日讲解的是第47讲,内容是:在两个工作表提取数据记录,并显示相同记录的报告。

我们在工作中经常会遇到这样的情况,要分析两个工作表,知道哪些记录是重复的,如果不用ADO解决,只用EXCEL来解决,该怎么处理呢?那就只能是用数据透视表来一个一个的比对了。但有了ADO,我们可以瞬间解决。

实例:我们的两个工作表如下:           

图片

  在数据备份和数据两个工作表中存在很多重复的数据,我们要把这些数据提取出来。

下面看我我给出的代码:

SubmynzRecords_47() '47  打开两个工作表提取数据记录,显示数据相同的记录报告

    Dim cnADO, rsADO As Object

    Dim strSQL As String

    Set cnADO =CreateObject("ADODB.Connection")

    Worksheets("47").Select

    strPath = ThisWorkbook.FullName

    Set rsADO =CreateObject("ADODB.Recordset")

    cnADO.Open"Provider=Microsoft.ACE.OLEDB.12.0;Extended Properties=Excel 12.0;DataSource=" & strPath

     strSQL = "SELECT A.* FROM [数据备份$] A,[数据$]B " _

            & "WHERE A.型号=B.型号"

    Set rsADO = cnADO.Execute(strSQL)

    Cells.ClearContents   

    Range("A1") = "【数据备份】工作表与【数据】工作表型号相同的记录"

    For i = 0 To rsADO.Fields.Count - 1

        Cells(2, i + 1) = rsADO.Fields(i).Name

    Next i

    Range("A3").CopyFromRecordsetrsADO   

    rsADO.Close

    cnADO.Close

    Set cnADO = Nothing

    Set rsADO = Nothing

End Sub

代码截图:

图片

代码解析:

1  strSQL = "SELECT A.* FROM [数据备份$] A,[数据$]B " _

            & "WHERE A.型号=B.型号"

上面的这句SQL语句就是提取两个工作表中数据相同的记录。

注意写法:SELECT A.* FROM [数据备份$] A,[数据$]B "& "WHERE A.型号=B.型号"

提取的是A工作表的字段,工作表是FROM: [数据备份$] A[数据$] B,条件是:A.型号=B.型号。

2   SetrsADO = cnADO.Execute(strSQL)  执行SQL语句

3     Cells.ClearContents     

Range("A1") = "【数据备份】工作表与【数据】工作表型号相同的记录"

计入表的抬头

4    For i = 0 To rsADO.Fields.Count - 1

        Cells(2, i + 1) = rsADO.Fields(i).Name

     Next i

  计入数据的字段

5    Range("A3").CopyFromRecordsetrsADO

   在工作表中计入得到的记录集。

下面我们看代码的运行: 

图片

好了,这样就实现了我们的目的,是不是非常的方便呢。工作中总会有各种实际情况发生,我们要具体问题,具体分析,我也力争把最经典的使用方案提供给读者。 

今日内容回向:

1  两个工作表中相同记录的判断的SQL语句如何写?

2  上面的代码还可以用什么方案实现?

3  如果判断的不是某个记录,而是所有的字段呢?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约