Excel精英培训网

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

[已解决]谢谢1032446692 老师。双击某一单元格提取全部记录

[复制链接]
发表于 2013-5-24 01:04 | 显示全部楼层 |阅读模式
本帖最后由 lhj323323 于 2013-5-25 20:37 编辑

老师:

请帮我看看,我写的语句错在哪儿了,谢谢了。
在上传的附件中有详细的说明,是关于双击某一单元格,从数据源表中提取包含此关键词的全部记录,导入到结果表中

求助 .rar (20.71 KB, 下载次数: 10)
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2013-5-24 01:26 | 显示全部楼层
基本上都是  下标越界的问题   自己多调试调试就可以发现规律了

求助 .rar

22.19 KB, 下载次数: 7

回复

使用道具 举报

发表于 2013-5-24 06:45 | 显示全部楼层
回复

使用道具 举报

发表于 2013-5-24 07:06 | 显示全部楼层
  1. Const adUseClient = 3
  2. Const adModeShareDenyWrite = 8
  3. Const adModeReadWrite = 3
  4. Const adModeRead = 1

  5. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  6.     If Target.Count > 1 Then Exit Sub
  7.     If Target.Column = 8 And Target.Row > 1 Then
  8.         Cancel = True
  9.         Range("h2:h50").Interior.ColorIndex = xlNone
  10.         Target.Interior.Color = RGB(193, 210, 240)
  11.         Call ADOQuery(Target.Value)
  12.         Sheet3.Activate
  13.     End If
  14. End Sub



  15. Sub ADOQuery(strMatch As String)
  16.     Dim AdoConn As Object, AdoRst As Object
  17.     Dim strConn$, strSQL$, strFullname$
  18.     Dim blnHasHeader As Boolean
  19.     Dim lLastRow As Long

  20.     On Error GoTo ErrorHandler

  21.     blnHasHeader = True
  22.     strFullname = ThisWorkbook.FullName

  23.     Set AdoConn = CreateObject("ADODB.Connection")


  24.     strSQL = "select  标题1,标题2,标题3,标题4,标题5 from [sheet2$A1:f" & Sheet2.Cells(Rows.Count, 1).End(xlUp).Row & "] where 关键词 like '%" & strMatch & "%'"


  25.     Select Case Application.Version
  26.         Case Is = "14.0", "15.0", "12.0"
  27.             strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source='" & _
  28.                       strFullname & "';Extended Properties='Excel 12.0;HDR=" & blnHasHeader & ";imex=1';"
  29.         Case Else
  30.             strConn = "Provider= Microsoft.Jet.OLEDB.4.0;" & _
  31.                       "Data Source='" & strFullname & "';Extended Properties='Excel 8.0;HDR=" & blnHasHeader & ";imex=1';"
  32.     End Select

  33.     'Debug.Print strConn

  34.     On Error GoTo ErrorHandler

  35.     With AdoConn
  36.         .CommandTimeout = 5
  37.         .ConnectionTimeout = 5
  38.         .CursorLocation = adUseClient
  39.         .Mode = adModeRead
  40.         .ConnectionString = strConn
  41.         .Open
  42.     End With

  43.     Debug.Print strSQL

  44.     Application.ScreenUpdating = False
  45.     Application.DisplayAlerts = False
  46.     Application.EnableEvents = False
  47.     Set AdoRst = AdoConn.Execute(strSQL)

  48.     With Sheet3
  49.         lLastRow = .Cells(Rows.Count, 1).End(xlUp).Row
  50.         If lLastRow > 1 Then
  51.             .Range("a2:e" & lLastRow).ClearContents
  52.         End If
  53.         If AdoRst.RecordCount > 0 Then
  54.             .Range("a2").CopyFromRecordset AdoRst
  55.             .Range("a1").CurrentRegion.EntireColumn.AutoFit
  56.             MsgBox "一共查询到了 " & AdoRst.RecordCount & " 条记录"
  57.         End If
  58.     End With

  59.     Application.ScreenUpdating = True
  60.     Application.DisplayAlerts = True
  61.     Application.EnableEvents = True

  62.     AdoConn.Close
  63.     Set AdoRst = Nothing
  64.     Set AdoConn = Nothing
  65.     Exit Sub

  66. ErrorHandler:
  67.     MsgBox Err.Number & vbCrLf & _
  68.            Err.Description
  69.     Set AdoRst = Nothing
  70.     Set AdoConn = Nothing
  71.     Application.ScreenUpdating = True
  72.     Application.DisplayAlerts = True
  73.     Application.EnableEvents = True
  74. End Sub
复制代码
回复

使用道具 举报

发表于 2013-5-24 08:29 | 显示全部楼层
另外,高级筛选在这种条件下也是可以的。
回复

使用道具 举报

 楼主| 发表于 2013-5-24 08:58 | 显示全部楼层
本帖最后由 lhj323323 于 2013-5-24 09:05 编辑
1032446692 发表于 2013-5-24 01:26
基本上都是  下标越界的问题   自己多调试调试就可以发现规律了


老师:
如果数据源F列存在空行,数据就提取不出来,是什么原因

只能提取SHEET1中的H3的关键词,而单元格[H2]和[H4]的却提取不出来
求助第二次 .rar (183.75 KB, 下载次数: 8)
回复

使用道具 举报

 楼主| 发表于 2013-5-24 09:00 | 显示全部楼层
hwc2ycy 发表于 2013-5-24 08:29
另外,高级筛选在这种条件下也是可以的。

老师,这个太复杂了,谢谢了
回复

使用道具 举报

发表于 2013-5-24 09:08 | 显示全部楼层
你用的FILTER函数,就要注意,FILTER只能针对一维数组了。
回复

使用道具 举报

发表于 2013-5-24 12:38 | 显示全部楼层    本楼为最佳答案   
lhj323323 发表于 2013-5-24 08:58
老师:
如果数据源F列存在空行,数据就提取不出来,是什么原因

  1. Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  2. Dim arr1, Arr2, Myr As Long, a, j%, r%, x%, arr
  3. Application.ScreenUpdating = False
  4. 'On Error Resume Next

  5. If Target.Count > 1 Then Exit Sub


  6. '(一)、双击H列从第2行起的某一单元格的关键词,从sheet2中提取对应信息到sheet3中--------------------------
  7. If Target.Column = 8 And Target.Row > 1 Then
  8. Cancel = True
  9. Range("h2:h50").Interior.ColorIndex = xlNone
  10. Target.Interior.Color = RGB(193, 210, 240)

  11. 'MsgBox Target.Value
  12. With Sheet2
  13. Myr = .Range("a65536").End(xlUp).Row '
  14. arr1 = .Range("a2:f" & Myr).Value '
  15. ReDim Arr2(1 To Myr, 1 To 6)
  16. For x = 2 To Myr
  17. If arr1(x - 1, 6) Like "*" & Target.Value & "*" Then
  18. r = r + 1

  19. For j = 1 To 6
  20. Arr2(r, j) = arr1(x - 1, j)
  21. Next
  22. End If
  23. Next


  24. With Sheet3 '结果表[股东分析]
  25. .Range("a1:f65536").Clear
  26. .[a1].Resize(1, 6) = Array("标题1", "标题2", "标题3", "标题4", "标题5", "关键词")
  27. .[a2].Resize(UBound(Arr2, 1), UBound(Arr2, 2)) = Arr2 '从第2行起导入所需数据
  28. .Rows.Font.Name = "宋体"
  29. .Rows.Font.Size = 10
  30. End With
  31. End With
  32. End If
  33. Application.ScreenUpdating = True
  34. Sheet3.Select
  35. End Sub
复制代码
回复

使用道具 举报

发表于 2013-5-24 12:39 | 显示全部楼层
不是空单元格的原因,而是transpose函数的局限性
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-6-7 21:13 , Processed in 1.435984 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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