Notifications
Clear all

Interromper Loop verificando entre cada função

7 Posts
2 Usuários
0 Reactions
1,733 Visualizações
(@ademire)
Posts: 0
New Member
Topic starter
 

Olá pessoal, sou novo aqui e necessito de uma ajuda.
Tenho uma função que chama a função Seleciona(). Esta função chama várias outras funções em sequencia que retornarão True ou False.
A dificuldade está em interromper a função Seleciona assim que a primeira das outras funções retornar False.
Sei que poderia colocar um IF após cada chamada de função (como fiz uma vez abaixo), mas gostaria de evitar isto pois serão muitas funções.
Teria uma outra maneira?

Call Seleciona(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)

Public Function Seleciona(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6) As Boolean

Seleciona = FUNCTION1(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)
If Seleciona = False then
Exit Funcion
End if

Seleciona = FUNCTION2(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)
Seleciona = FUNCTION2(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)
Seleciona = FUNCTIONn(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)

End Function

 
Postado : 02/07/2017 2:16 pm
(@felipemazz)
Posts: 0
New Member
 

Amigo, seja mais claro, não entendi quase nada do que você precisa hahaha
Talvez ajude, mas vc pode colocar um if utilizando OR, e dar um exit do ou exit for (dependendo do que está utilizando.)

Se a resposta não ajudou, seja mais claro no que você precisa, e os códigos procure colocar dentro de

                                                                                                	                                                
 
Postado : 02/07/2017 6:43 pm
(@ademire)
Posts: 0
New Member
Topic starter
 

Ok Felipe, vou tentar ser mais claro.
A função vai rodar e irá fazer uma série de checagens em sequencia. Abaixo tem somente duas como exemplo, "somatotal" e "diferençatotal". Elas sempre retornarão True ou False. Ira ter muitas outras destas. Se ao final de todas checagens ela continuar sendo verdadeira, ela ira imprimir o resultado, ok? O que gostaria era interromper a função "selecionajogo" quando aparecer a primeira checagem "false", sem precisar colocar um IF (onde cologuei x=0) entre cada uma das checagens que fizer, pois neste caso eu muitos e muitos IFs.
Será que consegui me explicar?

Public Function SelecionaJogo(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6) As Boolean
SelecionaJogo = SomaTotal(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)
x=0
SelecionaJogo = DiferencaTotal(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)


If SelecionaJogo = True Then
    Call ImprimeSelecionado(DZ1, DZ2, DZ3, DZ4, DZ5, DZ6)
    Cells(linhaImpr, 12) = SelecionaJogo
    x = 0
End If

End Function
[code][/code]
 
Postado : 05/07/2017 5:59 pm
(@felipemazz)
Posts: 0
New Member
 

Ademire, agora entendi sim!
Essas subrotinas são muito pesadas? (SomaTotal, DiferencaTotal, e outras que vc criou?)
Pq, vc pode simplesmente escrever:

If SelecionaJogo = False then Exit Sub

E sair colando entre as subrotinas.
Eu entendi que isto é exatamente o que vc não quer fazer, mas eu, sinceramente, desconheço outra maneira de fazer isto.
Até dei uma pesquisada em algo que funcionasse como o ON ERROR GOTO, mas não encontrei nada.

E perguntei se era muito pesada, só para entender se é por isso que vc quer sair no meio da rotina, pq ao final, se ela retornar False, já não vai acontecer nada hahahaha

Abraços!

 
Postado : 06/07/2017 1:29 pm
(@ademire)
Posts: 0
New Member
Topic starter
 

Olá Felipe,
Também havia pesquisado, mas como não encontrei nada acabei postando aqui.
As subrotinas não são pesadas. O que acontece é que estou prevendo mais de 200 subrotinas. Além disso a rotina principal deverá rodar milhões de vezes. Sendo assim, caso a primeira subrotina for "false" não tem porque continuar executando as outras 199. É uma questão de economizar tempo e processamento.
Eu havia pensado se seria possível algo do tipo: Quando pressiona uma tecla interrompe a rotina a qualquer momento. Seria possível alterar comando da tecla pela alteração da variável? Ou seja, quando o valor de "selecionajogo" trocar de "true" para "false" executar o comando da tecla. Se for possível confesso que não imagino como.
De qualquer forma muito obrigado.
Ha, devo deixar o tópico ainda em aberto?
Obrigado

 
Postado : 09/07/2017 7:24 am
(@felipemazz)
Posts: 0
New Member
 

Olá Felipe,
Também havia pesquisado, mas como não encontrei nada acabei postando aqui.
As subrotinas não são pesadas. O que acontece é que estou prevendo mais de 200 subrotinas. Além disso a rotina principal deverá rodar milhões de vezes. Sendo assim, caso a primeira subrotina for "false" não tem porque continuar executando as outras 199. É uma questão de economizar tempo e processamento.
Eu havia pensado se seria possível algo do tipo: Quando pressiona uma tecla interrompe a rotina a qualquer momento. Seria possível alterar comando da tecla pela alteração da variável? Ou seja, quando o valor de "selecionajogo" trocar de "true" para "false" executar o comando da tecla. Se for possível confesso que não imagino como.
De qualquer forma muito obrigado.
Ha, devo deixar o tópico ainda em aberto?
Obrigado

Cara, eu pensei em uma solução!
Agora estou saindo para dar aula, mas assim que chegar descrevo ela ok?
Abraços!

 
Postado : 10/07/2017 3:38 pm
(@ademire)
Posts: 0
New Member
Topic starter
 

Oi Felipe, você havia pensado em que?
Abraço.

 
Postado : 19/07/2017 3:59 pm