ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 413191246se

[分享] 循环遍历文件夹--文件搜索(宏)实用版 v1

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-11 10:25 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 413191246se 于 2016-1-11 16:10 编辑

略。。。。。。

TA的精华主题

TA的得分主题

发表于 2016-1-11 15:43 | 显示全部楼层
本帖最后由 13907933959 于 2016-1-12 11:38 编辑
413191246se 发表于 2016-1-11 10:25
139:实际上,打开文件前是有判断的, 如果大于等于22个文件,就不会打开;否则,自动打开。——已经做好超 ...

师傅好!
怪我描述问题不清楚,让你误判,罪过!你这个是直接把搜索到的文件名建立了超链接。
我的意思是继续保留 “以搜索到多少个文件!--是否打开搜索的文件?” 这个询问框,如点 “是” 就会打开以搜索到的文件,点 “否” 就不会打开以搜索到的文件,会再弹出一个文档,上面有以搜索到的文件名和所处的位置(师傅的这个设计的很人性化)。只是在点 “否” 后,这个弹出的文档上建立一个个打开的超链接,这样可以多项选择,更人性化。
师傅、我知道你这个打开文件前是有判断的,如果大于等于22个文件(并可在代码中修改打开的数字),就不会打开;否则,自动打开。

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-11 16:24 | 显示全部楼层
还是 139 细心啊!现在不判断多少文件了,直接“是、否”选择:
  1. Sub 循环遍历文件夹_文件搜索_超链接()
  2.     On Error Resume Next
  3.     Dim fd As FileDialog, i As Long, doc As Document, p As String, j As String, k As Long, q As String, r As String, s As String, t As String, a As String
  4.     Set fd = Application.FileDialog(msoFileDialogFolderPicker)
  5.     If fd.Show = -1 Then p = fd.SelectedItems(1) Else Exit Sub
  6.     Set fd = Nothing
  7.     If MsgBox("是否搜索文件夹 " & p & " ?", vbYesNo + vbExclamation, "循环遍历文件夹_文件搜索") = vbNo Then Exit Sub
  8.     j = MsgBox("是:<文件名关键词>    否:<正文关键词>    取消:<文件名关键词+正文关键词>", vbYesNoCancel + vbExclamation, "请选择文件搜索模式!")
  9.     If j = vbYes Then
  10.         k = 1: q = "<文件名关键词>": r = "任职"
  11.     ElseIf j = vbNo Then
  12.         k = 2: q = "<正文关键词>": r = "秦楚楚"
  13.     Else
  14.         k = 3: q = "<文件名关键词+正文关键词>": r = "任职,秦楚楚"
  15.     End If
  16. reipt:
  17.     a = InputBox("如果同时输入<文件名关键词>+<正文关键词>,必须以中文逗号分隔!如:“任职,秦楚楚”", "请输入" & q & "搜索文件!", r)
  18.     If a = "" Then Exit Sub
  19.     If k = 1 Then
  20.         If a Like "*,*" Then GoTo reipt
  21.         s = a
  22.     ElseIf k = 2 Then
  23.         If a Like "*,*" Then GoTo reipt
  24.         t = a
  25.     ElseIf k = 3 Then
  26.         If Not (a Like "*,*") Then GoTo reipt
  27.         s = Left(a, InStr(a, ",") - 1): t = Mid(a, InStr(a, ",") + 1)
  28.     End If
  29.     Set doc = Documents.Add
  30.     With Application.FileSearch
  31.         .NewSearch
  32.         .LookIn = p
  33.         .SearchSubFolders = True
  34.         If k = 1 Then
  35.             .FileName = "*" & s & "*.doc"
  36.         ElseIf k = 2 Then
  37.             .FileName = "*.doc"
  38.             .TextOrProperty = t
  39.         ElseIf k = 3 Then
  40.             .FileName = "*" & s & "*.doc"
  41.             .TextOrProperty = t
  42.         End If
  43.         If .Execute > 0 Then
  44.             For i = 1 To .FoundFiles.Count
  45.                 doc.Content.InsertAfter Text:=.FoundFiles(i) & vbCr
  46.             Next i
  47.             If MsgBox("搜索完毕!共发现 " & .FoundFiles.Count & " 个文件!——是否打开搜索的文件?", vbYesNo + vbExclamation, "循环遍历文件夹_文件搜索") = vbYes Then
  48.                 For i = 1 To .FoundFiles.Count
  49.                     Documents.Open FileName:=.FoundFiles(i)
  50.                 Next i
  51.             Else
  52.                 Options.CtrlClickHyperlinkToOpen = False '单击超链接打开文件
  53.                 Dim v As Paragraph
  54.                 For Each v In ActiveDocument.Paragraphs
  55.                     v.Range.Select
  56.                     Selection.MoveEnd unit:=wdCharacter, Count:=-1
  57.                     v.Range.Hyperlinks.Add Anchor:=Selection.Range, Address:=Selection.Text
  58.                 Next
  59.             End If
  60. '            MsgBox "搜索完毕!共发现 " & .FoundFiles.Count & " 个文件!", vbOKOnly + vbExclamation, "循环遍历文件夹_文件搜索"
  61.         Else
  62.             MsgBox "未发现文件!", vbOKOnly + vbCritical, "循环遍历文件夹_文件搜索"
  63.         End If
  64.     End With
  65. End Sub
复制代码

TA的精华主题

TA的得分主题

发表于 2016-1-12 09:39 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
413191246se 发表于 2016-1-11 16:24
还是 139 细心啊!现在不判断多少文件了,直接“是、否”选择:

师傅好!
四个字:师傅威武!三个字:蓝波湾!
师傅去掉了在代码中控制打开文件数量的代码,这个可以不去掉吗?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-12 14:58 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
139:感觉再限制文件数量已经没啥意义了!因为已经有两个选择:逐个打开,或逐个以超链接方式打开;还有,已经提示已经发现多少文件了!再限制数量的话,打开后还是文件名列表,既不是逐个打开每个文件,又不是超链接。

TA的精华主题

TA的得分主题

发表于 2016-1-12 16:19 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
413191246se 发表于 2016-1-12 14:58
139:感觉再限制文件数量已经没啥意义了!因为已经有两个选择:逐个打开,或逐个以超链接方式打开;还有, ...

师傅好!
我只是问一下,如果能在现有的功能上,不麻烦的话就保留,麻烦就不保留,现在这个以经非常人性化了!师傅辛苦了!!!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-12 20:35 | 显示全部楼层
139:麻烦倒不麻烦,只是加上很短的一个IF语句,类似 if x>=22 then...,但是,这样限制以后,如果搜索到21个文件,则将这21个文件的文件名提取到空白文件中,-------既不打开,又不创建超链接,是不是没意思?

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-12 20:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
139:麻烦倒不麻烦,只是加上很短的一个IF语句,类似 if x>=22 then...,但是,这样限制以后,如果搜索到21个文件,则将这21个文件的文件名提取到空白文件中,-------既不打开,又不创建超链接,是不是没意思?

TA的精华主题

TA的得分主题

发表于 2016-1-13 08:15 | 显示全部楼层
本帖最后由 13907933959 于 2016-1-13 09:11 编辑
413191246se 发表于 2016-1-12 20:36
139:麻烦倒不麻烦,只是加上很短的一个IF语句,类似 if x>=22 then...,但是,这样限制以后,如果搜索到21 ...

师傅好!
我本以为继可保留限制打开文件数量的功能,又可有超链接,所以才想保留。
徒弟的问题常常让师傅多费口舌,真是笨徒累坏师傅!唉!只有求师傅多多原谅了!

TA的精华主题

TA的得分主题

 楼主| 发表于 2016-1-13 09:21 | 显示全部楼层
139:说起来,我觉得应该表扬你!——过去,我也没有想到把文件名列表设置为超链接,一个一个地打开文件,连怎么变成超链接我也不会。现在,这个“文件搜索_超链接”宏,最终结果提示有多少文件找到,然后给用户两个选择:一是打开全部文件,二是提取文件名列表设置为超链接,可以手动有选择性地打开。——因为有这两个选择了,限制文件数就没有必要了(太多,不想都打开,可以选否,有选择性地打开超链接)。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-3-29 23:02 , Processed in 0.039353 second(s), 6 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

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