Notifications
Clear all

Executar Macro Utilizando Teclas Especiais.

14 Posts
3 Usuários
0 Reactions
1,529 Visualizações
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Bom Dia! Estou escrevendo uma macro e gostaria de executa-la ao pressionar F3, porem os testes que fiz nao obtive sucesso

Tenho um formulario e a macro coloquei em um modulo,

Tentei assim

Em esta pasta de trabalho no evento workbook open

Application.OnKey "{F3}", "NPagamento"

NPagamento é a macro que pretendo executar

e no Evento Before Close

Application.OnKey "{F3}", ""

Alguma ideia?

 
Postado : 09/05/2016 8:50 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

MPrudencio,

Bom Dia!

Não tenho absoluta ceerteza, mas acho que a Microsoft não permite que se use as teclas de função para a execução de macros, pois, como o próprio nome diz, são teclas de função e podem ser utilizadas para outras finalidades. Quando você tenta gravar uma macro, as teclas de atalho permitida já começam com o CTRL antes...

 
Postado : 09/05/2016 9:00 am
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Eu uso dessa forma para abrir um formulario...., que ao abrir executa uma macro especifica. e da mesma forma

Porem dessa vez nao funcionou...

 
Postado : 09/05/2016 9:23 am
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Consegui fazer funcionar porem so para abrir o formulario.

Sub FVendas()
FrmVendas.Show vbModeless
End Sub

Em Esta Pasta de Trabalho

Workbook open
Application.OnKey "{F3}", "FVendas"

Workbook Before Close

Funcionou...
Application.OnKey "{F3}", ""

 
Postado : 09/05/2016 9:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Em 2013 tivemos o tópico "Application.Onkey para Userform" - viewtopic.php?f=10&t=9275, com questão parecida, só que era para se executar a partir de controles em formulário.
Cheguei a montar um modelo que coloquei em Bibliotecas, veja se ajuda :

Teclas de Atalho em Formulario - viewtopic.php?f=21&t=9276

[]s

 
Postado : 09/05/2016 10:44 am
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Mauro a ideia é exatamente essa, porem de acordo com o que esta no modulo de classe e ajustando ao que pretendo ficou assim

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

    Select Case KeyCode

        Case vbKeyF6
            RegistraPagamento


    End Select
    
End Sub

Porem nao funcionou pretendo rodar a macro registrapagamento ao com o atalho da tecla F6

Obrigado por enquanto

 
Postado : 10/05/2016 10:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Marcelo, pela instrução que colocou, não precisa utilizar o Modulo de Classe citado no tópico que indiquei, la temos o modulo devido a criação em Tempo de Execução, testei aqui, e não tive erro.
Verifique se está fazendo corretamente, ou se tem algum outro código impedindo, e tambem informe se deu algum erro ou simplesmente não fez nada, procure acompanhar passo a passo utilizando "F8".

[]s

 
Postado : 10/05/2016 11:08 am
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Mauro nao acontece absolutamente nada...

Onde devo colar o codigo acima entao.... Pq colei no modulo de classe nem a depuração funcionou...

Colei no modulo e tb nao...

Outra coisa que observei é que no meu arquivo nas caixas de combinação do VBA onde seleciona a que evento o codigo deve rodar (Geral), nao altera em nada com a implantaçao do codigo

Sendo mais especifico a ideia é a seguinte

Estou fazendo um frente de caixa e na hora do pagamento tenho diversas opções de pagamento, e caso o cliente faça um pagamento parcial, exemplo a compra deu 100,00 e o mesmo faz o pagamento de 50,00 em cartao e outros 50,00 em dinheiro preciso registrar o pagamento parcial para finalizar a venda corretamente.

O codigo pra registrar o pagamento esta pronto entao preciso faze-lo funcionar atraves de um atalho.

E usar as teclas de função me pareceu a melhor opção.

O usuario digita o valor pago escolhe a forma de pagamento e executa a macro pra registrar o pagamento.

Essa é a ideia.

 
Postado : 10/05/2016 11:29 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Este código não vai em nenhum Módulo, e sim no Evento do Textbox em seu formulário cujo o nome é : TextBoxEvents.

Se o textbox que quer tiver o nome diferente tem de alterar, ou clique duas vezes no textbox e altere a propriedade no lado direito para "KeyUp" e cole as instruções :

Select Case KeyCode

    Case vbKeyF6
        RegistraPagamento

    End Select

É só isto, alias se não for ter outras teclas associadas ao textbox não precisaria do Case.

[]s

 
Postado : 10/05/2016 11:45 am
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Fiz assim


Private Sub TxtValorPago_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Select Case KeyCode

    Case vbKeyF6
        RegistraPagamento

    End Select
End Sub

A text box tem o nome txtValorPago digitei o valor pago e pressionei F6 mas nao executou o codigo.

 
Postado : 10/05/2016 12:08 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Marcelo, pela rotina não vejo erro, você deve estar cometendo algum equivoco, fiz um modelinho simples onde a macro "RegistraPagamento" lança o valor do textbox na planilha em A1.
Abra o formulário, digite qualquer valor no textbox e pressione "F6"

Aqui funciona normal, se não funcionar com você pode ser algum outro problema de configuração.

Onkey_Form

 
Postado : 10/05/2016 1:11 pm
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Acho que consegui entender o problema

Ao digitar o valor e confirmar com ENTER outra macro é executada para calcular o troco

E somente depois dessa execução o usuario vai pressionar F6 e isso nao funciona :(

Ja testei nos eventos Key down e key press, tb sem sucesso.

 
Postado : 10/05/2016 1:43 pm
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Marcelo, o evento KeyUp funciona com o foco no controle, uma vez que aperta o enter você sai do controle textbox consequentemente ele não tem mais o foco e a tecla F6 não irá funcionar, mas se tem uma outra rotina que é executada ao teclar enter, não sei qual evento está utilizando, mas você pode utilizar o evento EXIT e apos as rotinas que executa ter uma linha para chamar a macro RegistraPagamento sem precisar de tecla de atalho.

Private Sub TxtValorPago_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    
    MsgBox "Agora vamos executar a macro RegistraPagamento - " & vbCrLf & " - Que enviará o Valor para A1"
    RegistraPagamento
    
End Sub
 
Postado : 10/05/2016 4:29 pm
(@mprudencio)
Posts: 0
New Member
Topic starter
 

Mauro segue meu formulario com os codigos envolvidos no problema.

O Evento Exit nao funciona pq ele é utilizado para realizar o calculo de troco se o caso, pelo menos nao consegui fazer funcionar como gostaria.

 
Postado : 10/05/2016 5:11 pm