Visual Basic - Tengo un formulario con varios botones, quiero saber cual se presionó

Life is soft - evento anual de software empresarial
 
Vista:

Tengo un formulario con varios botones, quiero saber cual se presionó

Publicado por Angel (2 intervenciones) el 15/08/2018 20:28:46
¿Cual sería la forma mas facil de programar en Visual Basic 6 el siguiente ejemplo?

Tengo un Form con 30 CommandButtons y necesito ejecutar un mismo código cuando se apriete cualquiera de ellos, indicando cual botón se apretó

Este es el codigo que utilizo actualmente, aqui pongo solo cuatro botones, pero tengo mas de 30 boton

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub CommandButton1_Click()
Dia = CommandButton1.Caption
Call Actualizar_Fecha(Dia)
End Sub
 
Private Sub CommandButton2_Click()
Dia = CommandButton2.Caption
Call Actualizar_Fecha(Dia)
End Sub
 
Private Sub CommandButton3_Click()
Dia = CommandButton3.Caption
Call Actualizar_Fecha(Dia)
End Sub
 
Private Sub CommandButton4_Click()
Dia = CommandButton4.Caption
Call Actualizar_Fecha(Dia)
End Sub
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Andres Leonardo
Val: 3.117
Oro
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Tengo un formulario con varios botones, quiero saber cual se presionó

Publicado por Andres Leonardo (1798 intervenciones) el 15/08/2018 23:16:36
Yo te recomendaria hacer algo llamado Matriz de controles, es decir ....

Generar un Boton, lo copiar y pegas es decir vas a pegar 29 botones mas (si deseas hacer matriz de controles dices que si ) 'creal el primer boton bien con colores y todos y luego los pegas por que dar formato a todos se te puede complicar jejejejj...

Sigamos:
esto te hara qeu el control tenga un indice y ese sera tu numero de control.... entonces te tocara cambiar el caption para cada dia y el codigo se resume a :


1
2
3
4
5
Private Sub Command1_Click(Index As Integer)
    Dia = Command1(Index).Caption
    'Call Actualizar_Fecha(Dia)
    MsgBox "Presionaste el Boton " & Dia
End Sub



1
2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Antoni Masana
Val: 1.259
Plata
Ha mantenido su posición en Visual Basic (en relación al último mes)
Gráfica de Visual Basic

Tengo un formulario con varios botones, quiero saber cual se presionó

Publicado por Antoni Masana (558 intervenciones) el 16/08/2018 10:04:44
Las soluciones de Bruno y Andres Leonardo son validas y deberías tenerlas en cuenta puedes convertir los que tienes a Matriz poniendo mismo nombre a todos e ir cambiando la propiedad Index.

Y contestando a tu pregunta al procedimiento de actualizar fecha le pones un segundo parámetro que sera el numero de botón.

La solución tal y como lo tienes

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Private Sub CommandButton1_Click()
    Dia = CommandButton1.Caption
    Call Actualizar_Fecha(Dia, 1)
End Sub
 
Private Sub CommandButton2_Click()
    Dia = CommandButton2.Caption
    Call Actualizar_Fecha(Dia, 2)
End Sub
 
Private Sub CommandButton3_Click()
    Dia = CommandButton3.Caption
    Call Actualizar_Fecha(Dia, 3)
End Sub
 
Private Sub CommandButton4_Click()
    Dia = CommandButton4.Caption
    Call Actualizar_Fecha(Dia, 4)
End Sub

Deberias considerar la necesidad de definir las variables y no abusar de ellas.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub CommandButton1_Click()
    Call Actualizar_Fecha(CommandButton1.Caption, 1)
End Sub
 
Private Sub CommandButton2_Click()
    Call Actualizar_Fecha(CommandButton2.Caption, 2)
End Sub
 
Private Sub CommandButton3_Click()
    Call Actualizar_Fecha(CommandButton3.Caption, 3)
End Sub
 
Private Sub CommandButton4_Click()
    Call Actualizar_Fecha(CommandButton1.Caption, 4)
End Sub

Asi es mas corto, Funciona igual y si tienes que hacerlo 30 veces mas comodo de leer

1
2
3
4
Private Sub CommandButton1_Click():  Call Actualizar_Fecha(CommandButton1.Caption, 1): End Sub
Private Sub CommandButton2_Click():  Call Actualizar_Fecha(CommandButton2.Caption, 2): End Sub
Private Sub CommandButton3_Click():  Call Actualizar_Fecha(CommandButton3.Caption, 3): End Sub
Private Sub CommandButton4_Click():  Call Actualizar_Fecha(CommandButton1.Caption, 4): End Sub

Con la Matriz de Botones, con estas tres líneas soluciones la ejecución de 30 botones o más

1
2
3
Private Sub Boton_Click(Index As Integer)
    Call Actualizar_Fecha(Boton(Index).Caption, Index)
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Tengo un formulario con varios botones, quiero saber cual se presionó

Publicado por Angel (2 intervenciones) el 16/08/2018 17:35:36
Gracias por las respuestas, todas suenan bastante lógicas. la mas sencilla sería utilizar la matriz de controles, pero tuve un pequeño problema ya que el código lo estoy implementando en Excel y aquí no pude crear la matriz de controles. sin embargo resolví el problema con el siguiente código:

Puse el siguiente código en un formulario UserForm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Dim ControlForm As Control
Dim AobjCommandButton() As New Clase1
 
Private Sub UserForm_Initialize()
 
Dim intCtlCnt As Integer, objControl As Control
 
For Each objControl In Me.Controls
    If TypeOf objControl Is MSForms.CommandButton Then
        intCtlCnt = intCtlCnt + 1
        ReDim Preserve AobjCommandButton(1 To intCtlCnt)
        Set AobjCommandButton(intCtlCnt).CommandButtonEvents = objControl
    End If
Next objControl
 
Set objControl = Nothing
 
End Sub

Coloqué este código en un Módulo ya que es llamado desde varios procedimientos
1
2
3
4
5
6
7
Sub Actualizar_Calendario()
 
For Each ControlForm In CtrlCalendario1.Controls
        If TypeOf ControlForm Is CommandButton Then
               'Aqui el codigo para modificar propiedades de cada botón
        End if
Next


Finalmente este código en un modulo de clase
1
2
3
4
5
6
Public WithEvents CommandButtonEvents As MSForms.CommandButton
 
Private Sub CommandButtonEvents_Click()
     'Aqui el codigo para las acciones cuando se presiona un CommandButton
     MsgBox "Has presionado el botón " & CommandButtonEvents.Caption
End Sub

Aún así, agradezco mucho el soporte y las prontas respuestas.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Tengo un formulario con varios botones, quiero saber cual se presionó

Publicado por Orlando (1 intervención) el 15/11/2021 18:46:11
Excelente, funciona super bien en vba office 265
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar