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 в VS 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