excel学习库

excel表格_excel函数公式大全_execl从入门到精通

如何实现大数据在多工作表中精准查询

大家好,今日继续讲解VBA数据库解决方案,今日讲解第40讲:利用ADO实现同一文件的多个工作表精确查询.其实这讲的内容利用我之前讲解的知识点也可以自己完成.这里只是拿出来让大家再熟悉一下EXCEL的ADO连接,及RS多次打开记录集后的查询. 实例:在我的文件<VBA与数据库操作>.xlsm中有两页“两表查询数据”和“查询数据”,一些基础的数据在这两页文件中:如下截图:同时我在某页工作表中存在如下数据,要在上述的两个工作表中查出对应的数据资料放在后面:这个实例也是在工作中经常遇到的,如果扩展使用会更多。 下面看我给出代码: Sub mynzexcels_40() '第40讲,利用ADO,实现同一文件的确认查询 Dim cnADO, rsADO As Object Dim strPath, strTable, strSQL As String Dim SH As Worksheet Set cnADO = CreateObject("ADODB.Connection") '建立连接 strPath = ThisWorkbook.FullName cnADO.Open "provider=Microsoft.ACE.OLEDB.12.0;extended properties='excel 8.0;hdr=no;imex=1';data source=" & strPath i = 2 Do While Cells(i, 1) <> "" WW = Cells(i, 1) If InStr(WW, ":") > 0 Then WW = Left(WW, InStr(WW, ":") - 1) For Each SH In Worksheets If SH.Name = "两表查询数据" Or SH.Name = "查询数据" Then strTable = "[" & SH.Name & "$]" strSQL = "select F2,F3,F4,F5 from " & strTable & " where F1='" & WW & "'" Set rsADO = New ADODB.Recordset rsADO.Open strSQL, cnADO, 1, 3 If rsADO.EOF Then GoTo 200 If rsADO.RecordCount > 0 Then Cells(i, 2).CopyFromRecordset cnADO.Execute(strSQL) GoTo 100 End If End If 200: Next 100: rsADO.Close i = i + 1 Loop cnADO.Close Set cnADO = Nothing Set rsADO = Nothing End Sub 代码截图:代码讲解: 1 WW = Cells(i, 1) If InStr(WW, ":") > 0 Then WW = Left(WW, InStr(WW, ":") - 1) 此处我做了一个实例,就是如果在需要查找的数据中含有“:”那么要取冒号之前的数据。这是非常实用的一个实例,大家要记住上面的代码。 2 For Each SH In Worksheets 这里使用了一个FOR EACH循环,遍历工作表。 3 If SH.Name = "两表查询数据" Or SH.Name = "查询数据" Then 由于我事先知道我要在两页工作表中查询,所以我精确的控制了两页的工作表名称 4 If rsADO.RecordCount > 0 Then Cells(i, 2).CopyFromRecordset cnADO.Execute(strSQL) GoTo 100 End If 上述代码作用:当存在这样的记录,即记录数大于0那么提取数据。 代码的运行:备注:我写这讲的目的原想是能提高一下在很多的工作表中查询时能提高程序的运行速度,但我在几十个工作表中测试时发现运行的速度反而不如FIND的速度快,这里只是提供给大家一个方法吧。 今日内容回向: 1 如何实现利用ADO在多表中查询? 2 如果用FIND来编写上述代码该如何写呢?

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接