我遇到一个问题,即我在For循环中的“ Do While循环”仅执行一次。我尝试实现以下目标:
我有一堆Excel文件(* .xlsm)位于同一文件夹中,其中包含一些员工的数据,我想遍历每个员工并获得一定数量。到目前为止,一切都很好。当我想“更改”员工姓名时,问题就变成了。
给出以下代码:
public class MyHandler implements RequestHandler<Map<String,Object>,String> {
@Override
public String handleRequest(Map<String,Object> eventMap, Context context) {
LambdaLogger logger = context.getLogger();
logger.log("Body:" + eventMap.get("body"));
logger.log("Headers:" + eventMap.get("headers"));
logger.log("Method:" + eventMap.get("method"));
logger.log("Params:" + eventMap.get("params"));
logger.log("Query:" + eventMap.get("query"));
return("{}");
}
}
在For循环中的第一个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
变量在第一个do while循环完成时为空。
我需要有关如何重新设置myFile
变量的帮助,以使do while循环与for循环一样执行多次。
答案 0 :(得分:1)
Do While...Loop
为空时, myFile
退出。因此,在下一次For...Next
循环迭代中,myFile
为 still 为空,因此第二次For
循环迭代不会进入Do While
循环,因为它的退出条件马上得到满足。
考虑移动此行:
myFile = Dir(myPath & myExtension)
For...Next
循环中的第一件事。
...然后修复循环逻辑,这样您就不需要重新处理每个文件3次。