Eu tenho um loop for sobre uma matriz. O que eu quero fazer é testar uma determinada condição no loop e pular para a próxima iteração se for verdadeira:
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
Eu sei que posso fazer:
If (Schedule(i, 1) < ReferenceDate) Then Continue For
mas quero ser capaz de registrar o último valor de i na variável PrevCouponIndex.
Alguma ideia?
obrigado
vba
conditional
loops
Richard H
fonte
fonte
If (Schedule(i, 1) < ReferenceDate) Then Continue For
" Tem certeza disso?Continue
não é uma palavra-chave do VBA.Respostas:
Você não poderia simplesmente fazer algo simples assim?
fonte
IF
para o teste, então não é tão caro assim. Você deve, entretanto, garantir que o resultado mais comumSchedule(i, 1)
seja menor doReferenceDate
que evitar a execução comElse
mais freqüência do que o necessário. Caso contrário, use(ReferenceDate>=Schedule(i, 1))
. (se o teste for 50/50, não há necessidade de otimização)O VBA não tem uma
Continue
ou qualquer outra palavra-chave equivalente para pular imediatamente para a próxima iteração do loop. Eu sugeriria um uso criterioso deGoto
como uma solução alternativa, especialmente se este for apenas um exemplo inventado e seu código real for mais complicado:Se esse for realmente todo o seu código, @Brian está absolutamente correto. Basta colocar uma
Else
cláusula em suaIf
declaração e pronto.fonte
On Error Goto
).Continue
declaração). Pode-se argumentar que o uso deContinue
em outras línguas deve ser evitado e, portanto, também deve ser evitado aqui. De certa forma, o link que você postou mostra meu ponto. O link é para aGoTo
declaração em VB.Net. O VB.Net tem tratamento de erros estruturado e instruçõesContinue For
/Continue Do
. Realmente não há necessidade deGoTo
em VB.Net; Suspeito que ele foi deixado no local em grande parte para oferecer suporte à conversão mais fácil do código VBA / VB6 existente.GoTo
tem a vantagem de reduzir o aninhamento. Ignorar uma iteração de loop sem adicionar um nível de indentação é, IMO, um dos poucos usos legítimos doGoTo
em VBA / VB6. Especialmente se você extrair o corpo do loop em seu próprio procedimento .Você pode usar um tipo de
continue
usando um aninhadoDo ... Loop While False
:fonte
Continue For
não é válido em VBA ou VB6.A partir desta página do MSDN , parece ter sido introduzido no VB.Net no VS 2005./Net 2.
Como os outros disseram, não há realmente uma opção diferente de usar
Goto
ou umElse
.fonte
Olá, também estou enfrentando esse problema e resolvo isso usando o código de exemplo abaixo
fonte
Talvez tente colocar tudo no final se e usar um outro para pular o código, isso fará com que você não consiga usar o GoTo.
fonte