Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 8518|回复: 8

[已解决]多条件跨工作表查找并将满足条件数据复制到指定区域的问题?

[复制链接]
发表于 2013-5-8 14:20 | 显示全部楼层 |阅读模式
天啊,要一个表一个表的查找数据真累,求老师帮忙做一个能够跨工作表查找的东东,那就太感谢了!! 数据跨多个工作表查询.rar (26.51 KB, 下载次数: 316)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-8 19:07 | 显示全部楼层
新插入一个模块,粘贴代码,然后按钮重新指定宏。
  1. Const adUseClient = 3
  2. Const adModeShareDenyWrite = 8
  3. Const adModeReadWrite = 3
  4. Const adModeRead = 1

  5. Sub 查询()

  6.     Dim AdoConn As Object, AdoRst As Object
  7.     Dim StrConn$, strSQL$, strTemp$
  8.     Dim DataSource$
  9.     Dim iCondition As Byte
  10.     Dim i As Byte

  11.     Set AdoConn = CreateObject("ADODB.Connection")
  12.     Set AdoRst = CreateObject("ADODB.Recordset")

  13.     DataSource = ThisWorkbook.FullName

  14.     Select Case Application.Version
  15.         Case Is = "14.0":
  16.             StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & _
  17.                       DataSource & ";Extended Properties=""Excel 12.0;HDR=yes;imex=1"";"""
  18.         Case Is = "12.0"
  19.             StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & _
  20.                       DataSource & ";Extended Properties=""Excel 12.0;HDR=yes;imex=1"";"""
  21.         Case Else
  22.             StrConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  23.                       "Data Source=" & DataSource & "Extended Properties=""Excel 8.0;HDR=yes;imex=1"";"
  24.     End Select

  25.     Dim arr
  26.     arr = Range("b1:x2")
  27.    
  28.     For i = LBound(arr) To UBound(arr, 2)
  29.         If Len(arr(2, i)) > 0 Then
  30.             strTemp = strTemp & arr(1, i) & " like '" & arr(2, i) & "%' and "
  31.         End If
  32.     Next
  33.    
  34.     If Len(strTemp) > 0 Then strTemp = Left(strTemp, Len(strTemp) - 5)
  35.     'strTemp = Replace(strTemp, "%%", "%")
  36.    
  37.     For i = 1 To 4
  38.         Select Case True
  39.             Case Len(strTemp) > 0:
  40.                 strSQL = strSQL & "select * from [" & i & "$a1:y] where " & strTemp & " union all "
  41.             Case Else
  42.                 strSQL = strSQL & "select * from [" & i & "$a1:y]  union all "
  43.         End Select
  44.     Next

  45.     strSQL = Left(strSQL, Len(strSQL) - 10)

  46.     On Error GoTo ErrCheck
  47.     With AdoConn
  48.         .CommandTimeout = 5
  49.         .ConnectionTimeout = 5
  50.         .CursorLocation = adUseClient
  51.         .Mode = adModeRead
  52.         .ConnectionString = StrConn
  53.         .Open
  54.     End With
  55.    
  56.     Set AdoRst = AdoConn.Execute(strSQL)
  57.    
  58.     With Range("a5")
  59.         If Cells(Rows.Count, 1).End(xlUp).Row > 4 Then
  60.             Range("a5:x" & Cells(Rows.Count, 1).End(xlUp).Row).ClearContents
  61.         End If
  62.         Application.ScreenUpdating = False
  63.         .CopyFromRecordset AdoRst
  64.         Application.ScreenUpdating = True
  65.         MsgBox "查询完成"
  66.     End With

  67.     AdoConn.Close
  68.     Exit Sub

  69. ErrCheck:

  70.     MsgBox Err.Number & vbCrLf & _
  71.            Err.Description
  72.     Set AdoRst = Nothing
  73.     Set AdoConn = Nothing
  74. End Sub
复制代码
回复

使用道具 举报

发表于 2013-5-8 19:09 | 显示全部楼层    本楼为最佳答案   
现在通配符查找只会查找以指定内容开头的,如果要做到只要包含指定内容的话,
只需把
strTemp = strTemp & arr(1, i) & " like '" & arr(2, i) & "%' and "
改为
strTemp = strTemp & arr(1, i) & " like '%" & arr(2, i) & "%' and "
回复

使用道具 举报

 楼主| 发表于 2013-5-16 11:10 | 显示全部楼层
我下来以后,粘贴时提示错误,语法错误,不知道哪里出问题,还请老师帮忙看看
回复

使用道具 举报

 楼主| 发表于 2013-5-16 16:39 | 显示全部楼层
急盼,还是没用的上。
回复

使用道具 举报

发表于 2013-5-16 18:26 | 显示全部楼层
wdqinweiyu 发表于 2013-5-16 16:39
急盼,还是没用的上。

strTemp = strTemp & arr(1, i) & " like '%" & arr(2, i) & "%' and "

回复

使用道具 举报

发表于 2013-5-16 18:27 | 显示全部楼层
单引号与双引与我弄反了,
回复

使用道具 举报

 楼主| 发表于 2013-5-17 08:37 | 显示全部楼层
hwc2ycy  老师,我还是上传附件你再看下,老说是语法错误。
回复

使用道具 举报

 楼主| 发表于 2013-5-17 08:39 | 显示全部楼层
StrConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & _

DataSource & ";Extended Properties=""Excel 12.0;HDR=yes;imex=1"";"""
从上面这位置起,一执行就说是语法错误,变为红色。
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-8 08:57 , Processed in 0.454444 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表