Notifications
Clear all

Detectar tecla pressionada de cancelar a execução de um Sub

6 Posts
2 Usuários
0 Reactions
2,290 Visualizações
(@andersonjs)
Posts: 13
Active Member
Topic starter
 

Boa Tarde,

Gostaria da ajuda dos colegas para resolver o seguinte problema

Tenho um Loop em um Sub que fica rodado enquanto determinada condição for verdadeira. Gostaria que, quando o usuário pressionasse um determinado conjunto de teclas (por exemplo: CTRL + Seta para Cima), parasse a execução do Loop e saisse do Sub.

Mais ou menos assim

Sub Exemplo()

<Comandos>

While Condicao

If Teclas_Pressionadas = CTRL + Seta para Cima Then

Exit Sub

End If

Wend

<Comandos>

End Sub

 
Postado : 29/05/2014 9:19 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Dentro do loop, coloque:
VBA.Doevents

E mais, dê uma olhada no application.onkey
Ali vc consegue determinar uma tecla de atalho, que será capturada pelo doevents, que poderá chamará uma rotina que troca o valor de uma variável global (ou não), e vc pode colocar um exit loop ali no meio...

Fez sentido ?

FF

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/05/2014 10:06 am
(@andersonjs)
Posts: 13
Active Member
Topic starter
 

Boa Noite FF,

É mais ou menos isso? Fiz este exemplo, mas não está funcionando

Sub Exemplo()
Dim Condicao As Boolean
Condicao = True
While Condicao = True
DoEvents
Application.OnKey "{RIGHT}", "Sair"

Wend
End Sub

Public Sub Sair()
MsgBox ("Clicou seta para a direita")
End Sub

Abraços,

Anderson

 
Postado : 29/05/2014 7:03 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

public blSair as boolean

Sub Exemplo()
Dim Condicao As Boolean

Condicao = True
Application.onkey "^{UP}", “sair"

While Condicao = True

<comandos>
Doevents
If blSair then goto sair

Wend
Sair:
Application.OnKey "^{UP}"

BlSair =false
End Sub

Public Sub Sair()
BlSair =true
MsgBox ("Clicou seta para a direita")'linha desnecessária
End Sub

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 29/05/2014 7:41 pm
(@andersonjs)
Posts: 13
Active Member
Topic starter
 

Bom dia Fernando,

Ainda não estou conseguindo..... :(

Veja o exemplo que criei... o que estou fazendo de errado?

Abraços,

Anderson

 
Postado : 02/06/2014 8:45 am
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Seguinte, acabei de descobrir que com o OnKey, isso não vai dar certo. Ele só dispara um código quando você não está em tempo de execução.

Sugiro colocar um botão Cancelar, que chamará a rotina Sair.
Isso certamente funcionará.
E exclua as linhas do application.onkey...

FF

p.s.: Como moderador, eu tive que excluir seu anexo pois não atendia as regras do forum (estar compactado)...

Existem mil maneiras de preparar Neston. Invente a sua!
http://www.youtube.com/ExpressoExcel

 
Postado : 02/06/2014 9:01 am