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