做While循环无效过程/循环不起作用

时间:2019-06-18 16:35:32

标签: excel vba

当前问题是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宏应执行以下操作:

  1. 在文件夹1中打开一个excel文件
  2. 在文件夹2中打开一个excel文件
  3. 确认文件夹2的excel文件是正确使用的文件(通过检查单元格值)
  4. 在每个工作表中执行任务(如果正确)
  5. 循环浏览文件夹2中的文件,直到任务完成
  6. 移动到文件夹1中的下一个文件

由于当前的问题,我无法测试上面的大多数内容,但是它似乎可以工作到循环结束。

1 个答案:

答案 0 :(得分:1)

在这样的嵌套循环中不能多次使用Dir()-必须将每个Dir()作为单独的循环运行(每个Dir()必须在开始另一个循环之前完成)。尝试运行第一个目录并将结果添加到集合中,然后遍历该集合并在该集合中存储的值上使用Dir。