【发布时间】:2018-10-31 15:45:32
【问题描述】:
我有一个问题,我的 For 循环中的 Do While 循环只执行一次。我尝试实现以下目标:
我有一堆 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 代码只执行一次,对于 For 循环中的第一个 i。
我发现是因为在第一个 do while 循环完成时,myFile 变量为空。
我需要有关如何将 myFile 变量重新设置为某个值的帮助,以便 do while 循环执行与 for 循环一样多的次数。
【问题讨论】:
-
扭转局面:将
For放入Do循环中。 -
使用
Option Explicit并声明你的变量。并避免GoTo,这看起来很糟糕。 -
@IonuţSanda - 你试过按 F8,一步一步看看会发生什么吗?
-
@DougCoats
On Error GoTo不是GoTo声明,而是On Error声明 -
@DougCoats 我是……脖子上的迂腐疼痛;-)
标签: vba loops for-loop do-loops