Pressionar a tecla ...
 
Notifications
Clear all

Pressionar a tecla ENTER em uma ListBox

15 Posts
4 Usuários
0 Reactions
5,184 Visualizações
(@rafaelluan)
Posts: 26
Eminent Member
Topic starter
 

Bom dia,

Por favor, estive pesquisando em alguns fóruns e não encontro a solução para minha dúvida:

Tenho um formulário com alguns TextBox e um CommandButton que quando pressionado abre um outro formulário que contem uma ListBox. Esta ListBox esta configurada para que quando eu dê um duplo click a linha selecionada apareça (atualize) nos campos do 1º formulário.

O que eu gostaria de fazer é praticamente a mesma coisa, só que ao contrario de dar um duplo click eu gostaria de pressionar a tecla ENTER.

Obrigado,

Rafael Luan

 
Postado : 16/10/2013 7:16 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

RafaelLuan,

Bom Dia!

Troque o código que você tem, que está no evento DblClick, para dentro do evento ENTER do ListBox.

 
Postado : 16/10/2013 7:32 am
(@rafaelluan)
Posts: 26
Eminent Member
Topic starter
 

Wagner, obrigado pela atenção.

Eu tentei isto e nao deu certo, pois o evento ENTER ocorre quando eu aciono a minha ListBox, independente de qual linha eu clique ou selecione. Minha ListBox contem varias linhas (dados que são carregados de uma planilha), ou seja, quero que quando eu selecione determinada linha eu possa clicar na tecla ENTER e faça o mesmo procedimento como se eu tivesse usando o duplo click, acredito que usando KeyPress possa dar certo, porém não sou muito familiarizado com este evento.

 
Postado : 16/10/2013 7:45 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Pode experimentar, utilizando o evento keypress
Seria algo assim

Private Sub SuaListbox_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
suaListbox_Click 
'ou 
suaListbox_DblClick
'ou o que deseja    
End If
End Sub
 
Postado : 16/10/2013 8:10 am
(@wagner-morel-vidal-nobre)
Posts: 4063
Famed Member
 

Rafael,

Você tem razão. Desculpe a minha informação incorreta.

No seu caso, você deve colocar o código no evento KeyDown, caso a tecla ENTER seja pressionada. No Exemplo de código abaixo, é disparada uma mensagem sempre que a tecla ENTER é acionada.

Private Sub ListBox1_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If KeyCode = vbKeyReturn Then MsgBox "Tecla Enter Pressionada"
End Sub
 
Postado : 16/10/2013 8:17 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Wagner e Reinaldo, vocês teem razão quanto as dicas, mas da forma que o Rafael colocou :

Esta ListBox esta configurada para que quando eu dê um duplo click a linha selecionada apareça (atualize) nos campos do 1º formulário.
O ListBox é carregado com mais de uma Linha, e só vai para o formulário quado dermos o Duplo Clique a linha selecionada.

O que eu gostaria de fazer é praticamente a mesma coisa, só que ao contrario de dar um duplo click eu gostaria de pressionar a tecla ENTER.
Neste caso, se temos varias linhas e queremos que somente a selecionada vá para os textbox do formulário, eu sou da opinião de utilizarmos o Evento : Private Sub listbox1_Click() para carregar os itens da linha selecionada, a não ser que quando é carregado o ListBox ele já tenha a linha que pretende transferir selecionada.

[]s

 
Postado : 16/10/2013 8:37 am
(@rafaelluan)
Posts: 26
Eminent Member
Topic starter
 

Reinaldo, obrigado pela dica, entendi a lógica usada, porém o VBA não esta entendendo rs.

Você quis dizer que assim que eu pressionar ENTER ele executar o Evento Duplo Click, até ai tudo bem, na teoria, mas na prática da erro: "Erro de compilação: A declaração do procedimento não corresponde à descrição de evento ou procedimento eu possui o mesmo nome".

Wagner, obrigado, porém este código só me avisa quando ENTER é pressionado.

Mauro, eu ja tenho este evento no meu formulário, de forma mais clara, eu quero substituir o duplo clique por enter.

 
Postado : 16/10/2013 8:50 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Rafael,
O erro reportado indica que já há um evento (no projeto VB) com o mesmo nome do que foi adicionado.
Então não se pode adicionar outro, mas simampliar/complementar o existente.
Quanto a proposta do colega Morel, substitua o Msgbox... pelo que voce gostaria que ocorra (chamar o evento dblclick por exemplo)

 
Postado : 16/10/2013 9:06 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Rafael, quanto a sua obs :
Mauro, eu ja tenho este evento no meu formulário, de forma mais clara, eu quero substituir o duplo clique por enter.
Se entendi, você tem os dois Eventos no mesmo ListBox ? Se sim, o Evento Click se sobressai sobre o DblClick, então não entendi, se possivel poste as rotinas que está utilizando ou um modelo compactado.

[]s

 
Postado : 16/10/2013 9:07 am
(@rafaelluan)
Posts: 26
Eminent Member
Topic starter
 

Mauro,

criei um exemplo pequeno e de fácil entendimento:

1º Formulário, ha três textbox onde são carregados os dados da planilha quando se navega pelos botões anetrior e proximo.
ha um outro botão, este que chama o meu 2º Formulário, pois se minha planilha tiver 1.000 linhas com dados é complicado navegar pelo botão próximo.

2º Formulário, há uma textbox e uma listbox, a listbox estra programada no evento click para que cada linha selecionada ele atualize com o campo nome, e no duplo click para que ele descarregue da memoria o 2º Formulário e exiba os dados no 1º, porque isso? Porque estou tentanto criar uma tabela de preços que contem aproximadamente 60 textbox, e abrindo um 2º formulario com uma listbox e alguns textbox consigo filtrar de forma simples os dados que preciso, sem precisar ficar navegando pelos botões anterior e próximo.

Caso não entenda pode perguntar, é um pouco complicado explicar escrevendo rs

desde ja muito obrigado pela força Mauro.

 
Postado : 16/10/2013 10:21 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Veja se e o que espera

 
Postado : 16/10/2013 10:32 am
(@rafaelluan)
Posts: 26
Eminent Member
Topic starter
 

Reinal, brigadão!!!!

Resolveu meu problema, acredito que no inicio eu tenho me expressado de forma errada, mas é isto que eu esperava conseguir.

muito obrigado!!!

 
Postado : 16/10/2013 10:37 am
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Rafael, se me permite um comentário, apesar do exemplo do Reinaldo ser ótimo e ter resolvido sua questão, eu de inicio entendi que você queria trocar de evento, mas pela descrição e você deve ter lá suas razões para deixar desta forma, eu não vejo a praticidade de selecionar primeiro um item em uma relação que estamos visualizando para depois ter de teclar ENTER para carregarmos outros campos de outro formulário.

Como a princípio a intenção é procurarmos otimizar o máximo as ações em VBA, se trocarmos a sua instrução do evento KeyPress para o Evento Click, teriámos :

Private Sub ListBox1_Click()
    Dim Linha As Integer
    
    Linha = ListBox1.ListIndex
    
    UserForm1.TextBox1.Value = Cells(Linha + 2, 1)
    UserForm1.TextBox2.Value = Cells(Linha + 2, 2)
    UserForm1.TextBox3.Value = Cells(Linha + 2, 3)
    
    Unload Me

End Sub

E como eu disse, esta é a minha opinião, teriamos o mesmo efeito, mas sem precisar teclar ENTER, o que se não tiver nenhuma objetividade esta ação de teclar ENTER seria até mais rápido em termo de interações com o aplicativo.

[]s

 
Postado : 16/10/2013 11:16 am
(@rafaelluan)
Posts: 26
Eminent Member
Topic starter
 

Mauro, entendi o que quis dizer, obrigado pela dica também.

 
Postado : 16/10/2013 11:22 am
(@fredjedi)
Posts: 0
New Member
 

Procurei em outros sites e aqui também, estou fazendo uma calculadora e nao faço ideia de como atribuir as funcoes memoria mais, memoria menos, retorno de memoria. Outro impasse é a atribuição de teclas, exemplo, ao inves de clicar no botão 1, digitar um apareceria na textbox1 que é o visor da calculadora.

 
Postado : 13/04/2015 7:32 pm