Ric*_*d H 97 conditional vba loops
我有一个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
Run Code Online (Sandbox Code Playgroud)
我知道我能做到:
If (Schedule(i, 1) < ReferenceDate) Then Continue For
Run Code Online (Sandbox Code Playgroud)
但我希望能够在PrevCouponIndex变量中记录i的最后一个值.
有任何想法吗?
谢谢
mwo*_*e02 173
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
Run Code Online (Sandbox Code Playgroud)
如果这确实是你的所有代码,那么@Brian是绝对正确的.只需Else在你的If陈述中加上一个条款并完成它.
Bri*_*ian 31
难道你不能做这样简单的事吗?
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
Run Code Online (Sandbox Code Playgroud)
AHe*_*yne 29
你可以使用一种continue嵌套的方式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
Run Code Online (Sandbox Code Playgroud)
您好,我也面临这个问题,我使用下面的示例代码解决了这个问题
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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
306609 次 |
| 最近记录: |