VBA – 如何有条件地跳过for循环迭代

我有一个数组循环。 我想要做的是在循环中testing一个特定的条件,如果为真则跳到下一个迭代:

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 

但我希望能够logging在PrevCouponIndexvariables我的最后一个值。

有任何想法吗?

谢谢

你能不能做一些简单的事情?

 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或任何其他等价关键字来立即跳转到下一个循环迭代。 我会build议明智地使用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.Net2中的VB.Net。

正如其他人所说的,除了使用Goto或者Else以外,没有Else

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

 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 

也许尝试把它全部结束,如果和使用其他的跳过代码,这将使得它不能使用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