Excel精英培训网

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

输入文件名,后全盘搜索,找到后打开

[复制链接]
发表于 2019-9-8 22:38 | 显示全部楼层 |阅读模式
inputbox   输入指定文件名后,全盘搜索,找到后打开!求代码
excel精英培训的微信平台,每天都会发送excel学习教程和资料。扫一扫明天就可以收到新教程
发表于 2019-9-8 23:55 | 显示全部楼层
这事做不了,哪怕你就是在资源管理器全盘检索,都要检索好久。这检索代码也不是那么容易写,没有这么干的,除非是杀病毒。
回复

使用道具 举报

 楼主| 发表于 2019-9-9 21:46 | 显示全部楼层
可否指定路径只搜索指定的文件夹包含子文件夹     不全盘搜索   找到指定文件后   就打开
回复

使用道具 举报

 楼主| 发表于 2019-9-9 21:55 | 显示全部楼层
比如  我D盘下有很多文件夹和子文件夹  我需要  一个输入框 让我输入要查找的文件名比如  C.PDF,文件后缀都是PDF的!  搜索到后就打开C.PDF  如果查找不到 就 出个提示框 文件未找到   这样用VBS可以做到么?
回复

使用道具 举报

发表于 2019-9-10 08:32 | 显示全部楼层
能做到。但这有什么意义?资源管理器里也是一样可以做的。打开资源管理器,随便选个磁盘或路径,在右上角输入你要检所的文件,就开始检索了。检索到的文件会列式在下面,双击就可以打开。
这是系统软件,功能肯定比个人写的代码质量要高得多,速度快功能强大,个人写的代码仅仅是能执行,不管是效率还是其他都差得远。
回复

使用道具 举报

发表于 2019-9-10 09:40 | 显示全部楼层
https://www.voidtools.com/zh-cn/

这个工具找文件很快
回复

使用道具 举报

 楼主| 发表于 2019-9-10 19:12 | 显示全部楼层
hfwufanhf2006 发表于 2019-9-10 08:32
能做到。但这有什么意义?资源管理器里也是一样可以做的。打开资源管理器,随便选个磁盘或路径,在右上角输 ...

由于种种原因我只能用VBS来实现这个操作!不能用软件来实现!求大神给予达到目的的代码!
回复

使用道具 举报

发表于 2019-9-11 09:33 | 显示全部楼层
zmfhqje 发表于 2019-9-10 19:12
由于种种原因我只能用VBS来实现这个操作!不能用软件来实现!求大神给予达到目的的代码!

excelhome论坛川香裙子的递归简化版,我把所有用不到的东西都删掉了:

Sub ListFilesTest()
With Application.FileDialog(msoFileDialogFolderPicker)                   '文件对话框选择文件路径
      If .Show Then myPath$ = .SelectedItems(1) Else Exit Sub
End With
If Right(myPath, 1) <> "" Then myPath = myPath & ""

If [a100000].End(3).Row > 10 Then       '清除原有文件列表,要根据自己要求修改。我测试时是从第11行开始存放文件,所以起始是cells(11,1)
    Range(Cells(11, 1), Cells([a100000].End(3).Row, 2)).ClearContents
End If

Call GetAllFolderList(myPath)    '调用递归函数,参数只有一个:路径

End Sub

Function GetAllFolderList(myPath As String)    '递归函数
Set myFolder = CreateObject("Scripting.FileSystemObject").GetFolder(myPath)   '创建文件检索系统
For Each mySubFolder In myFolder.Subfolders  '遍历子目录
    Cells([a1000000].End(xlUp).Row + 1, 1) = "【" & mySubFolder.Name & "】"       '所有的目录都用【】括起来,以示与文件的区别
    Cells([a1000000].End(xlUp).Row, 2) = mySubFolder.Path  '完整路径。如果不需要子目录,这段代码是不需要的
    Call GetAllFolderList(mySubFolder.Path)   '调用递归检索子目录
Next
For Each mySubFile In myFolder.Files   '遍历文件
    Cells([a1000000].End(xlUp).Row + 1, 1) = mySubFile.Name     '显示文件
    Cells([a1000000].End(xlUp).Row, 2) = myPath                        '文件所在的完整路径
Next
End Function


1、递归检索是最简洁的文件检索代码,可以用双循环替代;
2、这段代码并不能对系统盘进行全盘检索,因为系统盘会有特殊用途的隐藏目录,这些目录具有很特殊格式,需要特别处理。普通目录都是可以的;
3、要具有实用性,不能把目录定义的太大,会很花时间。如果对一个以T容量为单位的数据盘进行全盘检索,可能需要十几分钟或更长,你在资源管理器里试一下就知道了。因为是递归,或许还会出现堆栈溢出。递归虽然简洁,但数据量过大,出问题的概率也大。当然这并不常见;
4、关于双击打开文件,百度上就有答案,我测试了可以用:CreateObject("Wscript.Shell").Run ("pdf文件路径+名称")


回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-20 14:52 , Processed in 0.475212 second(s), 9 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

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