Notifications
Clear all

VBA Detecta Button

7 Posts
5 Usuários
0 Reactions
2,927 Visualizações
(@duvidoso)
Posts: 35
Eminent Member
Topic starter
 

Boa tarde, estou precisando muito fazer a Userform reconhecer qual botão foi clicado, vou explicar.

• Userform = "Teste"
• Possui o botão "Button1"
• Aperto no "Button1"
• A Userform reconhece que apertei o "Button1", sem ter Sub/Comando para o "Button1" a Userform executa a ação considerando o botão clicado.

Exemplo de logica (o exemplo não segue comandos/classes reais só para ajudar):

Sub Useform()
If Button1.clicked then {Executa o comando}
If Button2.clicked then {Executa o comando}
If Button3.clicked then {Executa o comando}
If Button4.clicked then {Executa o comando}
If Button5.clicked then {Executa o comando}
End Sub

Em vez de criar um sub para cada botão! Preciso muito disso.

 
Postado : 02/05/2018 11:43 am
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Duvidoso,

Boa tarde!

Pode até ser que eu esteja enganado e que exista uma forma de fazer o que você está pedindo, todavia, se aparecer alguém com a resposta correta que você quer, eu também quero aprender. Já vi que em VBA, principalmente quando se utiliza recursos de módulos de Classe e também as API's do Windows tem muita coisa que nem imaginava que pudesse ser feita. Assim, vamos ver se alguém responde...

A princípio, como o VBA é uma linguagem voltada para EVENTOS e não há no objeto Userform nenhum evento que o faça identificar que houve um clique em um dos objetos que compõem o formulário, como o código seria disparado? Digo isso porque quando você clica no objeto Botão, o formulário perde o foco ativo. O Foco passa a ser o objeto clicado e, nesse caso, dispara o evento Click desse objeto. Então, ao meu ver, é impossível você clicar em um botão sem que seja disparado um evento clique desse mesmo botão.

Existe uma propriedade no objeto botão chamada TAG que você pode definir em tempo de design e, em tempo de execução do código, descobrir qual foi o botão clicado pela sua respectiva propriedade TAG previamente definida. Todavia, para isso, é necessário, obviamente, clicar no botão.

Confesso que não entendi a necessidade. Poderia explicar o porque dessa necessidade?

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 02/05/2018 12:17 pm
(@srobles)
Posts: 231
Estimable Member
 

Duvidoso,

A única maneira que conheço para isso seria, criar uma variável do tipo Integer ou Long no escopo do formulário, ex :

Dim idBotao As Long

Criar uma Sub que valide essa variável, e que conterá todas as rotinas que serão executadas de acordo com cada botão, ex:

Sub validarBotao()
   'Laço Select Case ou If para validar a variável
   Select Case idBotao
      Case = 1
         'Código para o botao 1
      Case = 2
         'Código para o botao 2
      Case = 3
         'Código para o botao 3
     'E assim por diante
   End Select
End Sub

E no evento Click de cada botão, basta alterar o valor da variável e chamar a Sub, ex:
Para o botão 1 :

Private Sub CommandButton1_Click()
   idBotao = 1
   Call validarBotao
End Sub

Para o botão 2 :

Private Sub CommandButton2_Click()
   idBotao = 2
   Call validarBotao
End Sub

Para o botão 3 :

Private Sub CommandButton3_Click()
   idBotao = 3
   Call validarBotao
End Sub

E assim para todos os botões do formulário.

Espero ter ajudado.

Abs

Espero ter ajudado.

Abs.

Saulo Robles

 
Postado : 02/05/2018 12:50 pm
Wagner Morel
(@wagner-morel-vidal-nobre)
Posts: 0
Illustrious Member
 

Saulo,

Parabéns. Dessa forma, utilizando o evento click do botão clicado, ótimo. Eu também sei que é possível. Inclusive, não precisa da variável. Basta pegar o conteúdo da propriedade TAG de cada botão, previamente atribuída em modo de design. Todavia, da maneira que ele pediu:

sem ter Sub/Comando para o "Button1"

...

Fica difícil... pelo menos pra mim. Pois aí, o userform teria que trabalhar por "adivinhação".

Desenvolvo pequenas soluções em VBA Excel a valores que variam entre R$ 50,00 a R$ 200,00. Se te interessar, entre no meu instagran (vba_excel_desenvolvimento)

Atenciosamente
Wagner Morel

 
Postado : 02/05/2018 12:59 pm
(@edcronos2)
Posts: 346
Reputable Member
 

Atribuir a Vários Controles a Mesma Rotina [VBA]
Felipe Gualberto

https://www.youtube.com/watch?v=Y2PU6ueBOqQ&feature=share

 
Postado : 02/05/2018 1:18 pm
Fernando Fernandes
(@fernandofernandes)
Posts: 43750
Illustrious Member
 

Segue um modelo utilizando Classes. Talvez auxilie

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

 
Postado : 02/05/2018 1:18 pm
(@duvidoso)
Posts: 35
Eminent Member
Topic starter
 

Ual!!!!!!!!!!!!!!!! Parabéns e obrigado eu sou muito grato a vocês, trabalho a um bom tempo com VBA e graças a pessoas como vocês hoje consigo desenvolver boas rotinas. Limpas e eficientes.

Estou fazendo uma formação em C# também ;) programação é um mundo incrível para mim todas as linguagens são fascinantes todas possuem seus propósitos.

Muito obrigado a todos.

 
Postado : 02/05/2018 1:40 pm