ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

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

[求助] VBA关于多工作簿查询包含指定的字符的应用(很难的)

[复制链接]

TA的精华主题

TA的得分主题

发表于 2010-10-28 19:23 | 显示全部楼层 |阅读模式
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
多工作簿查找包含指定的字符
大致思路:点击按钮,清空A3:E65536区域单元格内容及边框;然后弹出对话框,输入要查找的关键字符(比如“防盗锁”)后;点击确定,则开始查找当前路径下所有工作簿(不含本工作簿)中含有关键字符的单元格,并将找到的字符所在的工作簿名、工作表名、单元格地址、单元格内容显示在表格中,并自动添加序号及边框;同时希望能在状态栏中显示出完成进度,完成后弹出完成对话框,然后点击确定结束程序。

这是工作中碰到的一个难题,实际工作中工作簿每个月都有上百份,因本人技术菜,想了半个多月了还是没做出来,希望高手们能来帮忙实现效果!万分感激!附件已经上传!

[ 本帖最后由 wangzhongtu 于 2010-10-31 08:30 编辑 ]

文件夹2010.10.18.rar

11.72 KB, 下载次数: 240

求助

VBA关于多工作簿查询包含指定的字符的应用---kevinchengcw.rar

25.21 KB, 下载次数: 402

通过kevinchengcw老师多次修改,现已比较完善

VBA关于多工作簿查询包含指定的字符的应用---ericjon.rar

53.69 KB, 下载次数: 285

通过ericjon老师修改,目前还有点小问题

TA的精华主题

TA的得分主题

发表于 2010-10-28 19:36 | 显示全部楼层
会者不难,难者不会啊!

TA的精华主题

TA的得分主题

发表于 2010-10-28 19:38 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
能否把多个工作簿的文件导入到一个工作簿内,然后这样查找岂不是容易多了?

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-28 19:56 | 显示全部楼层

回复3楼

会者不难,难者不会   这句话很现实

至于多工作簿文件导入到一个工作簿内,显然是行不通的,查找的关键字符的所在工作簿名必须要能知道的,否则就达不到我的目的,   
原因:正常的话,我每个月要做100来份成本立项表,而材料价格是很难确定的,很难找到,但是有些价格以前做立项表时已经确认过的,如果用普通方法要在上千份立项表中找出不常用材料的价格似乎不现实,如果我的求助能得到帮助,就可以解决此问题了,希望能有朋友帮助解决!

[ 本帖最后由 wangzhongtu 于 2010-10-28 19:58 编辑 ]

TA的精华主题

TA的得分主题

发表于 2010-10-28 20:21 | 显示全部楼层
建议搜索多工作簿提取数据,论坛有不少类似的实例。查找可用Find+FindNext,估计只有完成进度表需要重新设计。

TA的精华主题

TA的得分主题

发表于 2010-10-28 20:32 | 显示全部楼层
Sub test()
Dim Dic, Wb As Workbook, Ws As Worksheet, Arr, N&, FN$, Str$, Rng As Range
Set Dic = CreateObject("scripting.dictionary")
Str = InputBox("查找内容:", "输入")
If Str = "" Then Exit Sub
Application.ScreenUpdating = False
FN = Dir(ThisWorkbook.Path & "\*.xls*")
Do While FN <> ""
    If FN <> ThisWorkbook.Name Then
        Set Wb = GetObject(ThisWorkbook.Path & "\" & FN)
        With Wb
            For Each Ws In .Worksheets
                With Ws
                    Set Rng = .[a1]
                    If Not .Cells.Find(Str, Rng) Is Nothing Then
                        Do While .Cells.Find(Str, Rng).Row > Rng.Row Or .Cells.Find(Str, Rng).Column > Rng.Column
                            Set Rng = .Cells.Find(Str, Rng)
                            Dic.Add Left(Wb.Name, InStrRev(Wb.Name, ".") - 1) & vbTab & Ws.Name & vbTab & Replace(Rng.Address, "$", "") & vbTab & Rng.Value, ""
                        Loop
                    End If
                End With
            Next Ws
        End With
        Wb.Close False
    End If
    FN = Dir
Loop
Set Wb = Nothing
Arr = Dic.keys
With Worksheets("查询")
    .Rows("3:" & .Rows.Count).Clear
    For N = LBound(Arr) To UBound(Arr)
        .Cells(N + 3, 1) = N + 1
        .Cells(N + 3, 2).Resize(1, 4) = Split(Arr(N), vbTab)
    Next N
    .[a3].Resize(N, 6).Borders.LineStyle = 1
End With
Set Dic = Nothing
Application.ScreenUpdating = True
MsgBox "查找完成"
End Sub

VBA关于多工作簿查询包含指定的字符的应用.rar

16.68 KB, 下载次数: 595

评分

1

查看全部评分

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-28 20:50 | 显示全部楼层

感谢6楼 kevinchengcw

太神奇了!非常感谢!!!非常好用!完全达到了效果!  刚才用了你的程序已经找出了之前找不到的材料价格了。  这个程序似乎可以给你加精哦  可是我没权限加  呵呵  
至于完成进度问题 我自己添加就可以了
强!!!

TA的精华主题

TA的得分主题

发表于 2010-10-28 20:55 | 显示全部楼层
上百份的话应该还不用显示进度吧,等你测试一下速度再说。

TA的精华主题

TA的得分主题

 楼主| 发表于 2010-10-28 22:12 | 显示全部楼层

回复8楼 kevinchengcw

刚才我把10个月的工作簿都测试了下 ,   我用的搜索关键字是“防盗锁” , 发现点问题:
一.成功的有2个月,所花时间大概在20-30秒之间(60份工作簿)
二.不成功的有8个月,其中分两种情况:
   
   1.执行后大概30多秒钟时,出错,我将其中的工作簿添加了需要搜索的关键字,后再执行,结果还是出同样的问题,
   2.工作簿中没有搜索到关键字符  会出错 ,如果打开一张工作簿  加入需要搜索的关键字符后 ,则执行成功,
已上传了错误截图,请kevinchengcw 看看  !同时请你帮忙对代码做些解释! 也好方便大家学习

[ 本帖最后由 wangzhongtu 于 2010-10-28 22:51 编辑 ]
第一个错误1.jpg
第一个错误2.jpg
第二个错误1.jpg
第二个错误2.jpg

TA的精华主题

TA的得分主题

发表于 2010-10-28 22:28 | 显示全部楼层
kevinchengcw老师的方法真是很好,本人也正有此需要。
在此也向kevinchengcw老师说声谢谢!!!
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

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

GMT+8, 2024-9-29 18:21 , Processed in 0.039672 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

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

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

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