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
но я хочу иметь возможность записать последнее значение я в переменной PrevCouponIndex.
Любые идеи?
Спасибо
Ответы
Ответ 1
Не могли бы вы просто сделать что-то простое?
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
Ответ 2
У 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
Если это действительно весь ваш код, @Brian абсолютно прав. Просто поставьте предложение Else
в свой оператор If
и сделайте с ним.
Ответ 3
Вы можете использовать тип 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
Ответ 4
Continue For
недействителен в VBA или VB6.
Из эта страница MSDN, похоже, она была введена в VB.Net в VS 2005./Net 2.
Как говорили другие, нет другого варианта, кроме использования Goto
или Else
.
Ответ 5
Привет, я также сталкиваюсь с этой проблемой, и я решаю это, используя приведенный ниже пример кода
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
Ответ 6
Возможно, попробуйте положить все это в конце, если и использовать другое, чтобы пропустить код, это сделает так, что вы не сможете использовать 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