Mam pętlę for na tablicy. To, co chcę zrobić, to przetestować określony warunek w pętli i przejść do następnej iteracji, jeśli to prawda:
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
Wiem, że potrafię:
If (Schedule(i, 1) < ReferenceDate) Then Continue For
ale chcę mieć możliwość zapisania ostatniej wartości i w zmiennej PrevCouponIndex.
Jakieś pomysły?
Dzięki
vba
conditional
loops
Richard H.
źródło
źródło
If (Schedule(i, 1) < ReferenceDate) Then Continue For
” Jesteś tego pewien?Continue
nie jest słowem kluczowym VBA.Odpowiedzi:
Nie mógłbyś po prostu zrobić czegoś takiego?
źródło
IF
do testu, więc nie jest to aż tak drogie. Powinieneś jednak upewnić się, że najczęstszym wynikiem jest to, żeSchedule(i, 1)
jest mniej niżReferenceDate
unikanie wykonywaniaElse
częściej niż to konieczne. W przeciwnym razie użyj(ReferenceDate>=Schedule(i, 1))
. (jeśli test jest 50/50, to nie ma potrzeby optymalizacji)VBA nie ma
Continue
ani żadnego innego równoważnego słowa kluczowego, aby natychmiast przejść do następnej iteracji pętli. Sugerowałbym rozsądne użycieGoto
jako obejścia, zwłaszcza jeśli jest to tylko wymyślony przykład, a twój prawdziwy kod jest bardziej skomplikowany:Jeśli to naprawdę cały twój kod, @Brian jest absolutnie poprawny. Po prostu umieść
Else
klauzulę w swoimIf
oświadczeniu i skończ z tym.źródło
On Error Goto
.).Continue
instrukcji). Można argumentować, żeContinue
należy unikać używania haseł w innych językach, a zatem również tutaj. W pewnym sensie link, który opublikowałeś, daje mi do zrozumienia. Link prowadzi doGoTo
instrukcji w VB.Net. VB.Net ma zarówno strukturalną obsługę błędów, jak iContinue For
/Continue Do
instrukcje. Naprawdę nie ma takiej potrzebyGoTo
w VB.Net; Podejrzewam, że pozostawiono go w dużej mierze w celu ułatwienia konwersji istniejącego kodu VBA / VB6.GoTo
ma tę zaletę, że ogranicza zagnieżdżanie. Pomijanie iteracji pętli bez dodawania poziomu wcięć jest, IMO, jednym z niewielu legalnych zastosowańGoTo
w VBA / VB6. Zwłaszcza jeśli wyodrębnisz ciało pętli do własnej procedury .Możesz użyć pewnego rodzaju
continue
, używając zagnieżdżonegoDo ... Loop While False
:źródło
Continue For
nie działa w VBA lub VB6.Na tej stronie MSDN wygląda na to, że została wprowadzona do VB.Net w VS 2005./Net 2.
Jak powiedzieli inni, tak naprawdę nie ma innej opcji niż użycie
Goto
lubElse
.źródło
Cześć, mam również ten problem i rozwiązuję go za pomocą poniższego przykładowego kodu
źródło
Może spróbuj umieścić to wszystko na końcu, jeśli i użyj else, aby pominąć kod, co spowoduje, że nie będziesz mógł używać GoTo.
źródło