VBA Do while Loop in For Loop只执行一次

VBA Do while Loop in For Loop executes only once

我有一个问题,我的 Do While 循环在 For 循环中只执行一次。我尝试实现以下目标:

我有一堆 excel 文件 (*.xlsm),位于包含一些员工数据的同一个文件夹中,我想遍历每个文件并获得一定数量。到目前为止,一切都很好。当我想 "change" 员工姓名时,问题就出现了。

给定以下代码:

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 代码仅执行一次,即 For 循环中的第一个 i。 我想通了,因为在第一个 do while 循环完成时 myFile 变量是空的。 我需要有关如何再次将 myFile 变量设置为某个值的帮助,以便 do while 循环执行与 for 循环一样多的次数。

Do While...LoopmyFile 为空时退出。所以在下一个 For...Next 循环迭代中,myFile 仍然是 空因此第二个 For 循环迭代不会进入 Do While 循环,因为它的退出条件马上就满足了。

考虑移动这条线:

myFile = Dir(myPath & myExtension)

For...Next 循环中的第一件事。

...然后修复循环逻辑,这样您就不需要重新处理每个文件 3 次了。