我有一个旧的2003 xls宏,它从“收件箱”类型的子文件夹中的所有excel转储文件中提取数据。文件是每天生成的,据我从旧代码中得知,Application.Find会查找它可以在此收件箱中找到的所有文件,然后逐个检查它们以对数据进行排序并将其正确放置在主文件中文档。
当然的问题是使用了Application.Find并且Excel中不再存在它,因此需要使用旧的Excel版本来执行此宏。必须先运行一个旧版本来导入数据,然后再运行一个新版本来满足所有其他需求,这很痛苦,所以我希望可以得到一些帮助,以一个具有相同作用的新功能替换旧代码。 / p>
我到过这里和其他地方使用人民功能查找给定位置的x个文件,并逐个浏览它们,但是我不太擅长尝试将这些更现代的解决方案与这个较旧的解决方案集成宏,因为它已经有一个循环的结构,直到所有Application.Find结果都完成为止。
我尝试了Dir方法,但没有成功,而且我无法设法处理文件计数/数组问题,因此它只能通过该子文件夹中的任何内容工作。
With Application.FileSearch
.NewSearch
.LookIn = inbox
.SearchSubFolders = False
.FileType = msoFileTypeExcelWorkbooks
If .Execute() > 0 Then
Set basebook = ThisWorkbook
For i = 1 To .FoundFiles.Count
Set mybook = Workbooks.Open(.FoundFiles(i))
预期的结果是,这在执行时可以无害地循环,因为在浏览了打开的文档中的数据之后,在代码中进一步向下移动时,它将询问Next i,并继续进行直到文件用完。但是,由于Application.Find不再存在,除非我运行2003版本,否则它只会在此时停止并出现预期的错误消息。
任何帮助将不胜感激!
答案 0 :(得分:0)
这是我遍历文件夹中所有文件的方式:
Option Explicit
Sub Test()
Dim FilePath As String, FileName As String
Dim wb As Workbook
FilePath = "Your Path"
FileName = Dir(FilePath & "*.xls*")
Do While FileName <> ""
Set wb = Workbooks.Open(FilePath & FileName, UpdateLinks:=False, ReadOnly:=True)
'Your Code
FileName = Dir
Loop
End Sub
在这种情况下,如您所见,查找扩展名包含xls
的所有文件,因此... xls, xlsx, xlsm, xlsb...
希望有帮助