Excel精英培训网

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

[已解决]跨工作簿查询并给出路径

[复制链接]
发表于 2016-8-19 15:58 | 显示全部楼层 |阅读模式
如题求助,跨工作薄查询并给出路径,谢谢大侠!
跨表查图.jpg
最佳答案
2016-8-19 16:41
  1. Public Brr(), r&

  2. Sub main()
  3. Dim fp As String, Arr, i&, nm$, Myr&, j&, r1, r2, col%, d
  4. Dim Sht As Worksheet, sh As Worksheet
  5. Application.ScreenUpdating = False
  6. Set d = CreateObject("Scripting.Dictionary")
  7. fp = ThisWorkbook.Path & ""
  8. Call searfile(fp, ".xls")
  9. Sheet1.Activate
  10. [b2:b1000].ClearContents
  11. Arr = [a1].CurrentRegion
  12. For i = 2 To UBound(Arr)
  13.     d(Arr(i, 1)) = i
  14. Next
  15. k = d.keys: t = d.items
  16. For i = 1 To UBound(Brr, 2)
  17.     If Brr(2, i) <> ThisWorkbook.Name Then
  18.     With GetObject(Brr(1, i) & Brr(2, i))
  19.         For j = 0 To UBound(k)
  20.             Set r1 = .Sheets(1).[b:b].Find(k(j), , , 2)
  21.             If Not r1 Is Nothing Then
  22.                 Cells(t(j), 2) = Brr(1, i) & Brr(2, i)
  23.                 d.Remove (k(j)): k = d.keys: t = d.items: Exit For
  24.             End If
  25.         Next
  26.         .Close False
  27.     End With
  28.     End If
  29. Next
  30. Application.ScreenUpdating = True
  31. End Sub

  32. Sub searfile(fp As String, fkey As String)
  33. Dim Arr1() As String, i1 As Integer, i2 As Integer, fm
  34. If Right(fp, 1) <> "" Then fp = fp & ""
  35. If Len(fkey) < 1 Then fkey = ".xls" '文件类型省略则仅搜索.xls文件
  36. fm = Dir(fp, vbDirectory)
  37. Do While fm <> ""
  38.     If fm <> "." And fm <> ".." Then
  39.         If (GetAttr(fp & fm) And vbDirectory) = vbDirectory Then
  40.             i1 = i1 + 1
  41.             ReDim Preserve Arr1(1 To i1)
  42.             Arr1(i1) = fp & fm
  43.         End If
  44.         If Right(fm, 4) = fkey Then  '如果是07版本,红字改为5
  45.             r = r + 1
  46.             ReDim Preserve Brr(1 To 2, 1 To r)
  47.             Brr(1, r) = fp
  48.             Brr(2, r) = fm
  49.         End If
  50.     End If
  51.     fm = Dir
  52. Loop
  53. For i2 = 1 To i1
  54.   Call searfile(Arr1(i2), fkey)
  55. Next
  56. End Sub

复制代码

跨表查询.zip

26.63 KB, 下载次数: 46

发表于 2016-8-19 16:41 | 显示全部楼层    本楼为最佳答案   
  1. Public Brr(), r&

  2. Sub main()
  3. Dim fp As String, Arr, i&, nm$, Myr&, j&, r1, r2, col%, d
  4. Dim Sht As Worksheet, sh As Worksheet
  5. Application.ScreenUpdating = False
  6. Set d = CreateObject("Scripting.Dictionary")
  7. fp = ThisWorkbook.Path & ""
  8. Call searfile(fp, ".xls")
  9. Sheet1.Activate
  10. [b2:b1000].ClearContents
  11. Arr = [a1].CurrentRegion
  12. For i = 2 To UBound(Arr)
  13.     d(Arr(i, 1)) = i
  14. Next
  15. k = d.keys: t = d.items
  16. For i = 1 To UBound(Brr, 2)
  17.     If Brr(2, i) <> ThisWorkbook.Name Then
  18.     With GetObject(Brr(1, i) & Brr(2, i))
  19.         For j = 0 To UBound(k)
  20.             Set r1 = .Sheets(1).[b:b].Find(k(j), , , 2)
  21.             If Not r1 Is Nothing Then
  22.                 Cells(t(j), 2) = Brr(1, i) & Brr(2, i)
  23.                 d.Remove (k(j)): k = d.keys: t = d.items: Exit For
  24.             End If
  25.         Next
  26.         .Close False
  27.     End With
  28.     End If
  29. Next
  30. Application.ScreenUpdating = True
  31. End Sub

  32. Sub searfile(fp As String, fkey As String)
  33. Dim Arr1() As String, i1 As Integer, i2 As Integer, fm
  34. If Right(fp, 1) <> "" Then fp = fp & ""
  35. If Len(fkey) < 1 Then fkey = ".xls" '文件类型省略则仅搜索.xls文件
  36. fm = Dir(fp, vbDirectory)
  37. Do While fm <> ""
  38.     If fm <> "." And fm <> ".." Then
  39.         If (GetAttr(fp & fm) And vbDirectory) = vbDirectory Then
  40.             i1 = i1 + 1
  41.             ReDim Preserve Arr1(1 To i1)
  42.             Arr1(i1) = fp & fm
  43.         End If
  44.         If Right(fm, 4) = fkey Then  '如果是07版本,红字改为5
  45.             r = r + 1
  46.             ReDim Preserve Brr(1 To 2, 1 To r)
  47.             Brr(1, r) = fp
  48.             Brr(2, r) = fm
  49.         End If
  50.     End If
  51.     fm = Dir
  52. Loop
  53. For i2 = 1 To i1
  54.   Call searfile(Arr1(i2), fkey)
  55. Next
  56. End Sub

复制代码
回复

使用道具 举报

 楼主| 发表于 2016-8-19 16:56 | 显示全部楼层
太感谢了,谢谢版主!
好好研究一下!
回复

使用道具 举报

发表于 2016-10-27 15:03 | 显示全部楼层
马上注册 发表于 2016-8-19 16:56
太感谢了,谢谢版主!
好好研究一下!

能否再上传下文件,原文件打不开
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 15:30 , Processed in 0.408120 second(s), 10 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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