У меня есть цикл for по массиву. Я хочу проверить наличие определенного условия в цикле и перейти к следующей итерации, если это правда:
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.
Любые идеи?
Спасибо
vba
conditional
loops
Ричард Х
источник
источник
If (Schedule(i, 1) < ReferenceDate) Then Continue For
». Вы уверены в этом?Continue
не является ключевым словом VBA.Ответы:
Не могли бы вы сделать что-то простое вроде этого?
источник
IF
для теста, так что это не так дорого с точки зрения кода. Тем не менее, вы должны убедиться, что наиболее частым результатом будетSchedule(i, 1)
меньше, чемReferenceDate
избегать выполненияElse
более часто, чем необходимо. В противном случае используйте(ReferenceDate>=Schedule(i, 1))
. (если тест 50/50, то в оптимизации нет необходимости)VBA не имеет
Continue
или любого другого эквивалентного ключевого слова для немедленного перехода к следующей итерации цикла. Я бы посоветовал разумно использовать егоGoto
в качестве обходного пути, особенно если это всего лишь надуманный пример, а ваш реальный код более сложен:Однако, если это действительно весь ваш код, @Brian абсолютно прав. Просто вставьте
Else
пункт в своеIf
утверждение и покончите с этим.источник
On Error Goto
).Continue
утверждения). Можно возразить, чтоContinue
следует избегать использования на других языках и, следовательно, следует избегать и здесь. В некотором смысле опубликованная вами ссылка подтверждает мою точку зрения. Ссылка наGoTo
заявление в VB.Net. VB.Net имеет как структурированную обработку ошибок, так и операторыContinue For
/Continue Do
. ВGoTo
VB.Net действительно нет необходимости ; Я подозреваю, что он был оставлен на месте в основном для поддержки более простого преобразования существующего кода VBA / VB6.GoTo
имеет преимущество сокращения вложенности. Пропуск итерации цикла без добавления уровня отступа - это, IMO, одно из немногих законных примененийGoTo
в VBA / VB6. Особенно, если вы извлечете тело цикла в его собственную процедуру .Вы можете использовать что-то вроде
continue
вложенногоDo ... Loop While False
:источник
Continue For
недействителен в VBA или VB6.На этой странице MSDN похоже, что он был введен в VB.Net в VS 2005./Net 2.
Как говорили другие, на самом деле нет другого варианта, кроме как использовать
Goto
илиElse
.источник
Привет, я тоже столкнулся с этой проблемой, и я решаю ее, используя приведенный ниже пример кода
источник
Возможно, попробуйте поставить все это в конце, если и используйте else, чтобы пропустить код, это сделает так, что вы не сможете использовать GoTo.
источник