Notifications
Clear all

Macro alterar comando de teclas via SendKeys

9 Posts
4 Usuários
0 Reactions
1,643 Visualizações
fcarlosc
(@fcarlosc)
Posts: 453
Honorable Member
Topic starter
 

Boa-tarde
Gostaria de uma ajuda para usar o "Application.SendKeys", preciso que, quando teclar seta para cima, voltar para o textbox anterior, tipo Shift+Tab.

Att,

Francisco

 
Postado : 29/06/2016 10:21 am
(@spanta)
Posts: 38
Eminent Member
 

Nesse caso, é melhor você programar no evento KeyUp de cada controle.

Você deve programar dentro do evento KeyUp para que coloque o Foco no outro controle. Lembrando de filtrar para isso acontecer somente quando clicar na seta para cima, ou seja, quando o KeyCode = 38

Por exemplo, imaginando que você tenha 2 textobox: txtNome e txtEndereco. Você poderia colocar:

Private Sub txtNome_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If KeyCode = 38 Then

txtEndereco.SetFocus

End If

End Sub

Deixei uma planilha anexa, é só clicar em ALT+F11 e abrir o formulário

 
Postado : 29/06/2016 8:18 pm
fcarlosc
(@fcarlosc)
Posts: 453
Honorable Member
Topic starter
 

Bom-dia Spanta
Dessa forma não funcionou, continua voltando para o textbox que está em cima e não o textbox anterior.
Esse exemplo que você postou já dá pra ter uma base, é só vc colocar o textbox um do lado do outro e fazer os testes. Testei ontem à noite, só que estou chegando quase meia-noite em casa então fiz poucos testes, e no trabalho não tá dando tempo pra testar.

Mas agradeço pela ajuda

Att,

Francisco

 
Postado : 30/06/2016 8:15 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Fcarlos, não seria o caso de só mudar a ordem/sequência de circulação entre os controles através da propriedade TabIndex?

 
Postado : 30/06/2016 8:58 am
fcarlosc
(@fcarlosc)
Posts: 453
Honorable Member
Topic starter
 

não..não...eu sempre coloco na sequencia...!

 
Postado : 30/06/2016 10:30 am
fcarlosc
(@fcarlosc)
Posts: 453
Honorable Member
Topic starter
 

Boa-noite.
Obrigado pelas dicas, consegui deixar o código da forma que eu queria.

A instrução seria essa:

Private Sub txtEndereco_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
   If KeyCode = 38 Then
             txtNome.SetFocus
   End If
End Sub

e assim por diante...

Att,

Francisco

 
Postado : 03/07/2016 6:57 pm
fcarlosc
(@fcarlosc)
Posts: 453
Honorable Member
Topic starter
 

Boa-noite.
Haveria alguma forma de executar esse código acima em um módulo e inicializar no UserForm sem ter q repetir em todas as textbox !?

Att,

Francisco

 
Postado : 04/07/2016 5:42 pm
 RMC
(@rmc)
Posts: 54
Trusted Member
 

Não é uma falha no vba pelo excel mesmo colocando em os keycode nos eventos das userform não irá funcionar, a não ser que exista uma outro maneira de codificar mas pelo keycode do Key Up não dara certo, você tera fazer um por um mesmo igual nosso amigo citou o Spanta.

 
Postado : 05/07/2016 5:37 am
EdsonBR
(@edsonbr)
Posts: 1057
Noble Member
 

Haveria alguma forma de executar esse código acima em um módulo e inicializar no UserForm sem ter q repetir em todas as textbox !?

Bom dia, Francisco!

Nesse caso vc poderia passar o keycode interceptado e também o controle que vai ganhar o foco para um procedimento, que pode estar em um módulo normal ou mesmo logo abaixo dos módulos de evento considerados, que é como imaginei abaixo. Exemplo:

Private Sub txtEndereco_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    RotinaÚnica KeyCode, txtNome
End Sub
___________________
Private Sub txtIdade_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    RotinaÚnica KeyCode, txtEndereco
End Sub
___________________
Private Sub RotinaÚnica(ByVal kC As MSForms.ReturnInteger, ByVal ctrl As MSForms.Control)
     If kC = 38 Then
         ctrl.SetFocus
    End If
End Sub

Se vc colocar em um módulo normal, terá que tirar o Private da frente do Sub RotinaÚnica.... e preferivelmente qualificar também. Ex.: Módulo1.RotinaÚnica KeyCode, txtEndereco

 
Postado : 05/07/2016 6:20 am