当前问题是DFile循环底部的= dir语句导致错误。我不明白为什么= dir语句中的一个会引起问题,而另一个则不会?
Sub for_each_workbook()
Dim folderpath As String, Dfile As String
Dim sourcepath As String, sourcefile As String
Dim DWorkbook As Workbook
Dim SWorkbook As Workbook
Dim DWorksheet As Worksheet
Dim SWorksheet As Worksheet
Dim ws As Worksheet
Dim DateRange As Range, cell As Range
Dim Date_lastrow As Long
folderpath = ‘filepath1
Dfile = Dir(folderpath & "*.xlsx")
Do While Len(Dfile) > 0
DoEvents
On Error GoTo 0
Set DWorkbook = Workbooks.Open(folderpath & Dfile, UpdateLinks:=0) 'set DWorkbook as recently opened Destination Workbook
Set DWorksheet = DWorkbook.Sheets(1)
sourcepath = ‘filepath2
sourcefile = Dir(sourcepath & "*.xlsx")
Do While Len(sourcefile) > 0
On Error GoTo 0
Set SWorkbook = Workbooks.Open(sourcepath & "\" & sourcefile, UpdateLinks:=0) 'set SWorkbook to recently opened Source workbook
Set SWorksheet = SWorkbook.Sheets(1)
If SWorksheet.Range("B2").Value = DWorksheet.Range("B5").Value Then 'check if source sheet is for same system as destination workbook
DWorkbook.Activate
For Each ws In Worksheets 'for each worksheet in correct source workbook, do the following:
Date_lastrow = Range("a999").End(xlUp).Row 'find last row
Set DateRange = Range("A8:A" & Date_lastrow)
'do vlookup
Next ws
Else: SWorkbook.Close savechanges:=False
End If
DoEvents
sourcefile = Dir 'not working?
Loop
DoEvents
DWorkbook.Close savechanges:=True
Dfile = Dir 'not working?
Loop
End Sub
excel宏应执行以下操作:
由于当前的问题,我无法测试上面的大多数内容,但是它似乎可以工作到循环结束。
答案 0 :(得分:1)
在这样的嵌套循环中不能多次使用Dir()-必须将每个Dir()作为单独的循环运行(每个Dir()必须在开始另一个循环之前完成)。尝试运行第一个目录并将结果添加到集合中,然后遍历该集合并在该集合中存储的值上使用Dir。