VBA 如何遍历文件夹,找到文件,找到单号,引出内容

我要查找的单号有几千个,分布在大约300个EXCEL文件里,EXCEL文件名和单号没有联系性(这样只能逐个文件去找了吧)
我的思路是这样的:建立一个三维数组,把所有EXCEL文件里的内容(最多2000行,六列)的内容全部一次性读入数组中,再建立三个FOR循环,第一个FOR逐个处理需查找的单号,第二个FOR逐个读取文件(第一维),第三个FOR在每个文件里逐个对比单号(第二维),符合后,返回第三维,在建立数组读取内容这一步,处理很快,大约五秒钟,但是在返回行号,并根据行号读取数据这一步,相当慢,一个单号大约要处理半秒左右
是不是我的思路有问题,我字典不太会用
代码基本上是这样的:
For h = 2 To ActiveSheet.UsedRange.Rows.Count ' 从第一个单号开始查找
For p = 1 To .FoundFiles.Count '从第一个文件开始查找
Set wb = GetObject(arr(p))
For i = 1 To wb.Sheets(ssheet).UsedRange.Rows.Count '从第一行开始查找
If Cells(h, 2) = dharr1(p, i, 6) Then '如果找到
GetCellValue dharr1, h, i, p '返回所在文件所在行号的相应数据
p = .FoundFiles.Count '并且,第一个单号的查找到此为止,直接进入第二个单号查找
Exit For
End If
Next
Next p '从第二个文件中查找
Next h '开始查找第二个单号

大神们,帮帮忙,谢谢了
我的代码有两个问题,第一个,太慢,第二个,文件数不能太多,否则内存溢出
不知道有没有更快的方法

第1个回答  2014-11-11
采用 数组+ files集合 + 字典判断 的方法将 单号 存入字典,循环files名字,用字典判断是否存在或者将 files名字 存入字典,循环 单号,用字典判断是否存在 files集合方法:Sub ShowFileList(ph) Dim fs, f, f1, fc, s Set fs = CreateObject("Scripting.FileSystemObject") Set f = fs.GetFolder(ph) Set fc = f.Files For Each f1 In fc s = s & f1.Name s = s & vbCrLf Next MsgBox sEnd Sub字典方法:Set d = CreateObject("Scripting.Dictionary")
以上回答你满意么?
第2个回答  2014-11-11
你还不如一次读一个文档的内容,然后遍历一个文件也不会遇到数据量大的问题,内存占用也不会那么多,并且你是分布在多个excel里面,如果没有重复的话,查找到过的可以标记起来,下次循环跳过,这样越往后循环的次数越少追问

挨个文件查找的代码我也做过,更慢

第3个回答  2014-11-11
思路有问题
不能一次性把所有文件读入内存。会造成速度慢,内存溢出

而应该是每次只处理一个文件
思路是(不会用字典就不用字典,不过代码会长一点)
1、建立一个空数组 用于存放结果
2、建立一个临时数组,用于存放当前处理文件中的结果
3.建立一个循环逐个处理每个文件,把单号放到临数组中
4、修改结果数组下标,把临时数组的内容放进去
5、释放临时数组
关闭文件
6、处理下一个文件本回答被网友采纳

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网