Ich habe eine for-Schleife über ein Array. Ich möchte eine bestimmte Bedingung in der Schleife testen und mit der nächsten Iteration fortfahren, wenn dies zutrifft:
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
Ich weiß, ich kann:
If (Schedule(i, 1) < ReferenceDate) Then Continue For
Ich möchte jedoch in der Lage sein, den letzten Wert von i in der Variablen PrevCouponIndex aufzuzeichnen.
Irgendwelche Ideen?
Vielen Dank
vba
conditional
loops
Richard H.
quelle
quelle
If (Schedule(i, 1) < ReferenceDate) Then Continue For
" Sind Sie sich da sicher?Continue
ist kein VBA-Schlüsselwort.Antworten:
Könnten Sie nicht einfach so etwas machen?
quelle
IF
für den Test verwenden, damit dies im Code nicht so teuer ist. Sie sollten jedoch sicherstellen, dass das häufigste ErgebnisSchedule(i, 1)
weniger ist, alsReferenceDate
zu vermeiden, dass dasElse
Programm häufiger als nötig ausgeführt wird. Andernfalls verwenden(ReferenceDate>=Schedule(i, 1))
. (Wenn der Test 50/50 ist, besteht kein Optimierungsbedarf)VBA verfügt nicht über ein
Continue
oder ein anderes gleichwertiges Schlüsselwort, um sofort zur nächsten Schleifeniteration zu springen. Ich würde eine vernünftige VerwendungGoto
als Problemumgehung vorschlagen , insbesondere wenn dies nur ein erfundenes Beispiel ist und Ihr realer Code komplizierter ist:Wenn das wirklich Ihr ganzer Code ist, ist @Brian absolut korrekt. Fügen Sie einfach eine
Else
Klausel in IhreIf
Erklärung ein und fertig.quelle
On Error Goto
).Continue
Aussage). Man kann argumentieren, dass die VerwendungContinue
in anderen Sprachen vermieden werden sollte und daher auch hier vermieden werden sollte. In gewisser Weise macht der Link, den Sie gepostet haben, meinen Standpunkt. Der Link führt zurGoTo
Anweisung in VB.Net. VB.Net verfügt sowohl über strukturierte Fehlerbehandlung als auch überContinue For
/Continue Do
Anweisungen.GoTo
In VB.Net ist dies wirklich nicht erforderlich . Ich vermute, dass es weitgehend beibehalten wurde, um die einfachere Konvertierung des vorhandenen VBA / VB6-Codes zu unterstützen.GoTo
hat den Vorteil, dass die Verschachtelung reduziert wird. Das Überspringen einer Schleifeniteration ohne Hinzufügen einer Einrückungsstufe ist IMO eine der wenigen legitimen VerwendungenGoTo
in VBA / VB6. Vor allem, wenn Sie den Körper der Schleife in eine eigene Prozedur extrahieren .Sie können eine Art
continue
von verwenden, indem Sie ein verschachteltes verwendenDo ... Loop While False
:quelle
Continue For
ist in VBA oder VB6 nicht gültig.Von dieser MSDN-Seite scheint es in VS 2005/Net 2 in VB.Net eingeführt worden zu sein.
Wie die anderen gesagt haben, gibt es keine andere Option als die Verwendung
Goto
oder eineElse
.quelle
Hallo, ich bin auch mit diesem Problem konfrontiert und löse es mit dem folgenden Beispielcode
quelle
Versuchen Sie vielleicht, alles am Ende zu setzen, wenn und verwenden Sie ein anderes, um den Code zu überspringen. Dadurch wird es so, dass Sie das GoTo nicht verwenden können.
quelle