ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 865|回复: 2

[求助] 求助,此问题如何解决

[复制链接]

TA的精华主题

TA的得分主题

发表于 2018-6-15 13:21 | 显示全部楼层 |阅读模式
本帖最后由 Nhand 于 2018-6-15 13:30 编辑

我想通过一段代码实现文件夹及子文件夹下所有xls文档的遍历,以搜索出包含特定内容的所有xls文档的路径。这段代码在小范围内测试是准确的,比如我一个文件夹下面放2个子文件夹,然后7,8层子文件夹下再放xls文档,能得出正确结果,但是如果我随意搜索一个包含大量文件的文件夹,都会得到一个统一的结果:自动打开了一个xlsm文档,名称为示例144 检查电脑名称。xlsm(只读)下面提示 对不起,您不是合法用户,文件将关闭! 请问这是怎么回事?
Sub sousuo()
path = ThisWorkbook.FullName
aa = 0
inp1 = Application.InputBox("功能选择  1 :只要查找到数据就退出程序  2:查找出所有出现数据的文档(耗时长) ")
inp = Application.InputBox("请输入要查找的内容,点击确定后选择一个要搜索的文件夹")
'''''''查找所有xls文档
Set ob = CreateObject("Shell.Application")
    Set obf = ob.BrowseForFolder(0, "选择文件夹", 0, 0)
    If Not obf Is Nothing Then lj = obf.self.path & "\"
    Set obf = Nothing
    Set ob = Nothing
    Set d = CreateObject("Scripting.dictionary")    '创建一个字典对象
    Set dd = CreateObject("Scripting.dictionary")   '存放所有xls文档路径
    d.Add (lj), ""
    i = 0
    Do While i < d.Count
        keyy = d.keys   '开始遍历字典
        nm = Dir(keyy(i), vbDirectory)    '查找目录
        Do While nm <> ""
            If nm <> "." And nm <> ".." Then
                If (GetAttr(keyy(i) & nm) And vbDirectory) = vbDirectory Then    '如果是次级目录
                    d.Add (keyy(i) & nm & "\"), ""  '就往字典中添加这个次级目录名作为一个条目
                End If
            End If
            nm = Dir    '继续遍历寻找
        Loop
        i = i + 1
    Loop
   
    For Each keyy In d.keys
        nm = Dir(keyy & "*.xls")
        Do While nm <> ""
            dd.Add (Keyy & nm), ""
            nm = Dir
        Loop
    Next
''''''''''''''''''查找所有xls文档结束
Set d1 = CreateObject("scripting.dictionary")
For Each t In dd.keys
   If t <> path Then
    Workbooks.Open t, 0
    For Each y In ActiveWorkbook.Worksheets
    Set r = y.UsedRange.Find(inp)
      If Not r Is Nothing Then
            
            d1(t) = ""
            aa = aa + 1
            If inp1 = 1 Then
               ActiveWorkbook.Close False
               GoTo 1
            End If
            
      End If
    Next
    ActiveWorkbook.Close False
    End If
Next
1  If aa = 0 Then
      MsgBox "没有查找到相关内容"
      Else
      Workbooks.Add
      ActiveWorkbook.ActiveSheet.Cells(1, 1) = "以下是查找到数据的文件路径"
      a = 2
      For Each m In d1.keys
      ActiveWorkbook.ActiveSheet.Cells(a, 1) = m
      a = a + 1
      Next
      End If
End Sub

QQ截图20180615125121.png

TA的精华主题

TA的得分主题

发表于 2018-6-15 14:16 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2018-6-15 15:41 | 显示全部楼层
找到原因了,代码错了,但是哪里错了不知道,因为我推翻重新写的。。。
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-12-25 15:47 , Processed in 0.035186 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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