VBA-как условно пропустить итерацию цикла for
у меня есть цикл 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.
какие идеи?
спасибо
6 ответов:
не могли бы вы просто сделать что-то простое, как это?
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 не было!--1--> или любой другой аналог сайта, чтобы сразу перейти к следующей итерации цикла. Я бы предложил разумное использование
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 абсолютно правильно. Просто поставьте
ElseпунктIfзаявление и покончить с этим.
Continue Forнедопустимо в VBA или VB6.С эта страница MSDN похоже, что он был введен в VB.Net в 2005 году./ Net 2.
как говорили другие, на самом деле нет другого варианта, кроме как использовать
GotoилиElse.
вы можете использовать вида
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
Привет я также столкнулся с этой проблемой, и я решить эту проблему, используя ниже пример кода
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
Comments