Página 1 de 1

Como sair de uma rotina recursiva pressionando CTRL+BREAK

Enviado: 18 Jan 2018 às 11:58
por AndersonLeal
Olá,

Marquei meu outro tópico como respondido pois achava que tinha encontrado a solução para o meu problema, porém eu estava enganado. Abaixo o link, tem um arquivo de exemplo:

viewtopic.php?f=12&t=6060

O problema é que estou utilizando uma sub recursiva para pesquisar nas pastas do computador. Apenas a título de curiosidade, uma sub recursiva é uma rotina que chama a si mesma um determinado nº de vezes, também pode ser usada em funções.

A instrução
Application.EnableCancelKey = xlErrorHandler
envia para o procedimento em execução um erro interceptável com o código 18, daí utilizo
On Error GoTo Sair
para tratar o erro gerado após pressionar as teclas CTRL+BREAK . Na linha Sair apenas coloco um
Exit Sub
para abandonar a macro, mas como trata-se de uma rotina recursiva a sub voltar a chamar a si mesma e continua a pesquisa até percorrer todas as subpastas da pasta principal.

O que quero fazer é que ao pressionar CTRL+BREAK eu interrompa de alguma forma essa sub recursiva, parando assim a pesquisa, pois dessa forma se a macro estiver demorando muito para realizar a pesquisa, o usuário pode interromper a mesma a qualquer momento via teclado.

Se for possível percorrer todas as subpastas de um diretório sem utilizar a recursividade também resolve meu problema.

Agradeço muito se alguém puder me orientar como proceder.

Se precisarem de um arquivo de exemplo é só avisar.

Atenciosamente,
Anderson Leal

Re: Como sair de uma rotina recursiva pressionando CTRL+BREA

Enviado: 21 Jan 2018 às 12:32
por babdallas
Anexe um arquivo de exemplo, por favor.

Re: Como sair de uma rotina recursiva pressionando CTRL+BREA

Enviado: 23 Jan 2018 às 10:32
por AndersonLeal
Olá,

Estou anexando um arquivo de exemplo.

A rotina para parar a execução seria do botão Parar. Selecione uma pasta do seu computador (botão com os três pontinhos (...) ao lado do textbox) e depois clique em Buscar.

A rotina Procurar_Arquivos é a sub recursiva que gostaria de interromper via teclado.

Qualquer dúvida estou a disposição.

Atenciosamente,
Anderson Leal

Re: Como sair de uma rotina recursiva pressionando CTRL+BREA

Enviado: 26 Jan 2018 às 16:23
por alexandrevba
Boa tarde!!

Talvez algo como a propriedade EnableCancelKey, deve te ajudar!
Código: Selecionar todos
Private Sub test()
'https://msdn.microsoft.com/en-us/library/aa214566(office.11).aspx
On Error GoTo handleCancel
Application.EnableCancelKey = xlErrorHandler
MsgBox "This may take a long time: press ESC to cancel"
For x = 1 To 1000000    ' Do something 1,000,000 times (long!)
    ' do something here
Next x

handleCancel:
If Err = 18 Then
    MsgBox "You cancelled"
End If

End Sub
Att

Re: Como sair de uma rotina recursiva pressionando CTRL+BREA

Enviado: 29 Jan 2018 às 10:12
por AndersonLeal
Olá alexandrevba,

Sobre a propriedade EnableCancelKey que você mencionou já utilizei e não deu certo, se a rotina na qual você a utilizar não for recursiva funciona perfeitamente, mas com uma sub recursiva não funciona.

Faça o teste com o arquivo que anexei e perceba que quando pressionar CTRL+BREAK a rotina é interrompida e a mensagem é exibida, mas ao descartar a msgbox a busca continua de onde tinha parado.

Obrigado por se disponibilizar a responder minha dúvida :)

Atenciosamente,
Anderson Leal