У меня есть цикл 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.
Любые идеи?
Спасибо
Не могли бы вы просто сделать что-то простое?
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
IF
для теста, так что это не так уж дорого в коде. Однако следует убедиться, что наиболее распространенным результатом является то, что Schedule(i, 1)
меньше, чем ReferenceDate
чтобы избежать выполнения Else
чаще, чем необходимо. В противном случае используйте (ReferenceDate>=Schedule(i, 1))
. (если тест 50/50, то нет необходимости в оптимизации)
У 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
и сделайте с ним.
Continue For
недействителен в VBA или VB6.
Из эта страница MSDN, похоже, она была введена в VB.Net в VS 2005./Net 2.
Как говорили другие, нет другого варианта, кроме использования Goto
или 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
If (Schedule(i, 1) < ReferenceDate) Then Continue For
» Вы уверены в этом?Continue
не является ключевым словом VBA.