SAIR DE UMA SUB

GUIGOR 16/03/2014 13:00:24
#436117
boa tarde amigos estou com um problema é o seguinte:
eu tenho um arquivo texto onde eu farro ele do inicio ao fim entao coloquei essa função em um modulo da seguinte forma:
Sub NotaFiscalEletronicaProdutosServiços()
Open strCaminho For Input As #intFF
Do While Not EOF(intFF)
Line Input #intFF, strAux
aqui vai a rotina onde pego os dados do arquivo text
Loop
Close #intFF

qual o meu problema:
na verdade eu faço um loop do inicio ao fim sendo que em determinados momentos eu preciso interromper esse processo e nao deixar mas que ele continue com isso.
eu ja coloque em um botao exit sub sendo que mesmo assim ele continua, sera que é pq ele esta em um modulo separado e nao no form principal?
preciso muito da ajuda de voces
um forte abraço
fiquem com deus
NILSONTRES 16/03/2014 13:19:32
#436119
Vc precisa criar não uma sub, mas sim uma função com parametros.
Onde essa função encerra o processo dependendo de uma condição.
TUNUSAT 16/03/2014 16:25:57
#436126
GUIGOR,

Para forçar a saída de uma sub você pode usar: [Ô]Exit Sub[Ô].
Mas eu gostei mais da solução do NILSONTRES.

[][ô]s,
Tunusat.
GUIGOR 16/03/2014 17:36:19
#436129
Mas como eu faria isso ? Nao sei teria algum ex.
ROBSON 16/03/2014 17:46:01
#436131
A sugestão do Nilsontres é boa,
Mas se desejar permanecer com a sua tente colocar um DO EVENTS na sua Sub em General Declarations.

GUIGOR 16/03/2014 20:14:17
#436133
Como disse o exit sub nao funciona Nilsontresvc poderia postar um ex de como fazer isso com uma funcao e alguem teria como me ajudar.
NILSONTRES 17/03/2014 00:10:22
#436137
Depende de como vc esta utilizando, mas abaixo um exemplo para vc entender a logica.

Function Teste() As Boolean
if condição atendida then
Teste = True
End If
End Function


Private Sub BotaoTeste_Click()
if Teste=False then exit sub [ô]aqui para tudo, caso contrario segue o codigo
[ô]segue o codigo
end Sub
MARCELO.TREZE 17/03/2014 08:23:43
#436146
Resposta escolhida
O problema não está na sub e sim no loop uma vez no loop é meio dificil interrompe-lo, e a função correta para isso seria um EXIT DO

bom vamos a uma maneira, declare no módulo a seguinte variável:

Global interromper As Boolean


No load do form que você chama a função coloque

Interromper = False


no click de um botão coloque

interromper = True


mude seu laço para

Open strCaminho For Input As #intFF
Do While Not EOF(intFF)

[txt-color=#007100][ô] abaixo segue como sair do laço[/txt-color]
DoEvents
If Interromper = True Then
Exit Do
End If
[ô]
Line Input #intFF, strAux
aqui vai a rotina onde pego os dados do arquivo text
Loop
Close #intFF
NILSONTRES 17/03/2014 10:40:48
#436158
Perfeito MARCELO-TREZE,
Só que eu desconfio que nosso amigo não esta querendo parar só a sub propriamente dita, mas sim ela, e o que vem após a chamada dela.
Desconfio, não tenho certeza. Por isso que postei um exemplo de chamada de uma função e a parada após ela.

Abraço
MARCELO.TREZE 17/03/2014 10:52:48
#436160
Entendi sua explanação mas veja bem citação do colega:

Citação:

na verdade eu faço um loop do inicio ao fim sendo que em determinados momentos eu preciso interromper esse processo e nao deixar mas que ele continue com isso.



como este laço está em uma sub erroneamente ele achou que sair da sub pararia o laço, e não após ele chamar a sub o laço se inicia, e não para mais, a não ser que seja interrompido.

GUIGOR 17/03/2014 11:33:41
#436164
marcelo muito obrigado era exatamente isso que eu precisava.
Tópico encerrado , respostas não são mais permitidas