Неправильная процедура Do Loop / петли не работают - PullRequest
0 голосов
/ 18 июня 2019

Текущая проблема - операторы = dir в нижней части цикла DFile вызывают ошибку. Я не понимаю, почему одно из операторов = 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. открыть файл Excel в папке 1
  2. Открыть файл Excel в папке 2
  3. подтвердить, что файл Excel папки 2 является правильным (путем проверки значения ячейки)
  4. Выполнение задачи (если правильно) в каждом рабочем листе
  5. цикл по файлам в папке 2, пока задача не будет завершена
  6. перейти к следующему файлу в папке 1

Я не смог протестировать большинство из вышеперечисленных из-за текущих проблем, но, похоже, он работает до конца цикла.

1 Ответ

1 голос
/ 18 июня 2019

Вы не можете использовать Dir () более одного раза во вложенном цикле, подобном этому - вы должны запускать каждый Dir () как отдельные циклы (каждый Dir () должен завершиться, прежде чем запускать другой).Попробуйте запустить первый dir и добавить результаты в коллекцию, затем зациклите эту коллекцию и используйте Dir для сохраненных значений из коллекции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...