VBA - how to conditionally skip a for loop iteration

在数组上有一个 for 循环。我想要做的是在循环中测试某个条件,如果为 true,则跳到下一个迭代:

For i = LBound(Schedule, 1) To UBound(Schedule, 1)
If (Schedule(i, 1) < ReferenceDate) Then
PrevCouponIndex = i
Continue   '*** THIS LINE DOESN'T COMPILE, nor does "Next"
End If
DF = Application.Run("SomeFunction"....)
PV = PV + (DF * Coupon / CouponFrequency)
Next

我知道我能做到:

 If (Schedule(i, 1) < ReferenceDate) Then Continue For

但是我希望能够将 i 的最后一个值记录在 PrevCouponIndex 变量中。

有什么想法吗?

Thanks

400510 次浏览

你就不能做点像这样简单的事吗?

For i = LBound(Schedule, 1) To UBound(Schedule, 1)
If (Schedule(i, 1) < ReferenceDate) Then
PrevCouponIndex = i
Else
DF = Application.Run("SomeFunction"....)
PV = PV + (DF * Coupon / CouponFrequency)
End If
Next

VBA 没有 Continue或任何其他等效关键字来立即跳转到下一个循环迭代。我建议明智地使用 Goto作为变通方法,特别是如果这只是一个人为的示例,而您的实际代码更加复杂:

For i = LBound(Schedule, 1) To UBound(Schedule, 1)
If (Schedule(i, 1) < ReferenceDate) Then
PrevCouponIndex = i
Goto NextIteration
End If
DF = Application.Run("SomeFunction"....)
PV = PV + (DF * Coupon / CouponFrequency)
'....'
'a whole bunch of other code you are not showing us'
'....'
NextIteration:
Next

如果这真的是你所有的代码,那么@Brian 是绝对正确的。只要在你的 If语句中加入一个 Else子句就可以了。

Continue For在 VBA 或 VB6中无效。

这个 MSDN 页面看来,它已经在 VS 2005中被引入到 VB.Net 中。

正如其他人所说的那样,除了使用 GotoElse之外,实际上没有其他选择。

嗨,我也面临这个问题,我解决这个使用下面的示例代码

For j = 1 To MyTemplte.Sheets.Count


If MyTemplte.Sheets(j).Visible = 0 Then
GoTo DoNothing
End If




'process for this for loop
DoNothing:


Next j

也许尝试把它放在最后,如果和使用一个 else 跳过代码,这将使它,使您能够不使用 GoTo。

                        If 6 - ((Int_height(Int_Column - 1) - 1) + Int_direction(e, 1)) = 7 Or (Int_Column - 1) + Int_direction(e, 0) = -1 Or (Int_Column - 1) + Int_direction(e, 0) = 7 Then
Else
If Grid((Int_Column - 1) + Int_direction(e, 0), 6 - ((Int_height(Int_Column - 1) - 1) + Int_direction(e, 1))) = "_" Then
Console.ReadLine()
End If
End If

You can use a kind of continue by using a nested Do ... Loop While False:

'This sample will output 1 and 3 only


Dim i As Integer


For i = 1 To 3: Do


If i = 2 Then Exit Do 'Exit Do is the Continue


Debug.Print i


Loop While False: Next i