VBA Do в то время как Loop in For Loop выполняется только один раз - PullRequest
0 голосов
/ 31 октября 2018

У меня проблема с выполнением цикла «Пока в цикле по циклу» выполняется только один раз. Я пытаюсь добиться следующего:

У меня есть куча файлов Excel (* .xlsm), расположенных в одной папке, в которой содержатся данные о некоторых сотрудниках, и я хочу просмотреть каждого из них и получить определенное число. Все идет нормально. Проблема возникает, когда я хочу «изменить» имя сотрудника.

С учетом следующего кода:

Set FldrPicker = Application.FileDialog(msoFileDialogFolderPicker)

With FldrPicker
    .Title = "Select A Target Folder"
    .AllowMultiSelect = False
    If .Show <> -1 Then GoTo NextCode
    myPath = .SelectedItems(1) & "\"
End With

NextCode:
myPath = myPath
If myPath = "" Then GoTo ResetSettings

myExtension = "*.xlsm"
myFile = Dir(myPath & myExtension)        

For i = 1 To 3
    xCallsEin = 0
    xMa = wb.Sheets(2).Cells(i, 1)
    MsgBox xMa
    Do While myFile <> ""
        Set wb2 = Workbooks.Open(Filename:=myPath & myFile)
        DoEvents

        xCallsEinTemp = Application.WorksheetFunction.VLookup(xMa, wb2.Sheets(1).Range(Columns(2), Columns(6)), 4, 0)

        xCallsEin = xCallsEin + xCallsEinTemp

        wb2.Close SaveChanges:=False
        DoEvents
        myFile = Dir
        wb1.Sheets(1).Cells(i + 6, 2) = xCallsEin        
    Loop        
Next i

Код Do while выполняется только один раз, для первого i в цикле For. Я понял, потому что переменная myFile пуста к тому времени, когда первый цикл do while завершен. Мне нужна помощь о том, как снова установить переменную myFile во что-нибудь, чтобы цикл do while выполнялся столько раз, сколько цикл for.

1 Ответ

0 голосов
/ 31 октября 2018

Do While...Loop выходит, когда myFile пусто. Таким образом, на следующей итерации цикла For...Next, myFile равен все еще пусто, и, следовательно, вторая итерация цикла For не входит в цикл Do While, поскольку его условие выхода выполняется сразу же.

Попробуйте переместить эту строку:

myFile = Dir(myPath & myExtension)

Первое, что есть внутри For...Next цикла.

... затем исправьте логику зацикливания, чтобы вам не нужно было повторно обрабатывать каждый файл 3 раза.

...