ExcelTip.Net留存知识帖 ---【注:附件之前被网盘供应商清空后,现已修复-现已修复-现已修复为本地下载!】
现在位置:首页 > E问E答 > Excel VBA > 如何用vba代码查找当前工作簿目录下含有关键字的文件信息并列表显示?

如何用vba代码查找当前工作簿目录下含有关键字的文件信息并列表显示?

作者:绿色风 分类: 时间:2022-08-17 浏览:226
楼主
kevinchengcw
Q: 如何用vba代码查找当前工作簿目录下含有关键字的文件信息并列表显示?
A: 示例代码如下:
  1. Sub test()
  2. Dim Dic, Wb As Workbook, Ws As Worksheet, Arr, N&, FN$, Str$, Rng As Range, Str2$
  3. Set Dic = CreateObject("scripting.dictionary")  '创建字典项目,用于存储找到的信息
  4. Str = InputBox("查找内容:", "输入")     '输入要查找的关键字并赋值给变量
  5. If Str = "" Then Exit Sub       '如果未输入或取消则退出程序
  6. Application.ScreenUpdating = False  '关闭屏幕刷新,提高处理速度
  7. On Error Resume Next    '加上容错代码,防止运行出错
  8. FN = Dir(ThisWorkbook.Path & "\*.xls*")     '查找当前工作簿目录下的excel文件
  9. Do While FN <> ""       '当文件名不为空时循环执行
  10.     If FN <> ThisWorkbook.Name Then     '当文件名不为当前工作簿名时执行下述操作
  11.         Set Wb = GetObject(ThisWorkbook.Path & "\" & FN)    '打开当前文件并赋值给变量
  12.         With Wb
  13.             For Each Ws In .Worksheets  '循环当前工作簿中各个工作表
  14.                 With Ws
  15.                     If WorksheetFunction.CountIf(.UsedRange, "*" & Str & "*") <> 0 Then  '判断当前工作表中是否有关键字存在,如果有,则执行下述操作
  16.                         Set Rng = .UsedRange.Find(Str)  '设定单元格区域变量为使用区域中找到的第一个单元格
  17.                         Do
  18.                             Str2 = Wb.Name & vbTab & Ws.Name & vbTab & Replace(Rng.Address, "$", "") & vbTab & Rng.Value  '将需要记录的内容串接并赋值给字符串
  19.                             If Not Dic.exists(Str2) Then Dic.Add Str2, ""  '如果字典中不存在这一字符串索引及添加(主要是防止意外出错)
  20.                             Set Rng = .UsedRange.Find(Str, Rng)     '单元格变量转到下一个
  21.                         Loop While .UsedRange.Find(Str).Address <> Rng.Address  '如果单元格地址等于第一个找到的单元格地址时说明已经循环一遍了,所以退出循环
  22.                     End If
  23.                 End With
  24.             Next Ws
  25.         End With
  26.         Wb.Close False  '关闭文件且不保存
  27.     End If
  28.     FN = Dir  '循环到下一个文件
  29. Loop
  30. Set Wb = Nothing    '清空工作表变量
  31. With Worksheets("查询")
  32.     .Rows("3:" & .Rows.Count).Clear     '查询表里清空原有内容
  33.     If Dic.Count > 0 Then      '如果字典项目不为空,则
  34.         Arr = Dic.keys  '将keys赋值给数组
  35.         For N = LBound(Arr) To UBound(Arr)      '循环数组各项
  36.             .Cells(N + 3, 1) = N + 1        'A列写入序号
  37.             .Cells(N + 3, 2).Resize(1, 4) = Split(Arr(N), vbTab)    '对应列写入对应内容
  38.         Next N
  39.         .[a3].Resize(N, 5).Borders.LineStyle = 1    '添加边框线
  40.         MsgBox "查找完成"   '显示提示信息
  41.     Else
  42.         MsgBox "不存在你要搜索的内容"       '如果字典内容为空则直接提示内容
  43.     End If
  44. End With
  45. Set Dic = Nothing       '清空字典项目
  46. Application.ScreenUpdating = True   '打开屏幕刷新
  47. End Sub

注意,上述代码对复杂数据文件无效,如:含有密码或自动运行宏及窗体等的文件,可能造成运行失败。
附示例文件。
查找当前工作簿目录下的含有关键字的文件并列表显示.rar
2楼
wangzhongtu
程序很经典谢谢
3楼
zixuan2119
追随巨人的脚步……

免责声明

有感于原ExcelTip.Net留存知识的价值及部分知识具有的时间限定性因素, 经与ExcelTip.Net站长Apolloh商议并征得其同意, 现将原属ExcelTip.Net的知识帖采集资料于本站点进行展示, 供有需要的人士查询使用,也慰缅曾经的论坛时代。 所示各个帖子的原作者如对版权有异议, 可与本人沟通提出,或于本站点留言,我们会尽快处理。 在此,感谢ExcelTip.Net站长Apolloh的支持,感谢本站点所有人**绿色风(QQ:79664738)**的支持与奉献,特此鸣谢!
------本人网名**KevinChengCW(QQ:1210618015)**原ExcelTip.Net总版主之一

评论列表
sitemap