Añadir controles con código VBA

Estoy realizando una aplicación en Excel usando varios formularios. En uno de ellos necesito que se generen varios "Command Buttons" de forma dinámica. Lo he conseguido mediante el código que indico a continuación, pero el problema surge porque no consigo que se detecte el evento "click" en los distintos botones para que, dependiendo del botón, se ejecute una macro concreta.
Espero que me podáis ayudar. Muchas gracias.

Private Sub UserForm_Activate()
  Dim l As Integer  
  For l = 1 To 3
    BotonObjeto = "Boton_Prueba" & "l"
    Set BotonObjeto = Controls.Add("Forms.CommandButton.1")
    With BotonObjeto
     .Caption = "BOTÓN " & l
     .FontSize = 7
     .FontName = Arial
     .BackColor = &H396864
     .ForeColor = &H8000000E  
     .Width = 98
     .Left = 18
     .Height = 16
     .Top = l * 20
    End With
  Next
End Sub

1 Respuesta

Respuesta
2

Realiza los siguientes pasos:

1. Crea una Clase1:

Instrucciones para crear una clase

  1. Abre tu hoja de excel
  2. Para abrir Vba-macros y poder pegar la macro, Presiona Alt + F11
  3. En el menú elige Insertar / Módulo de clase
  4. En el panel del lado derecho copia la macro
Public WithEvents tbxCustom1 As MSForms. CommandButton 'Custom button
'
Private Sub tbxCustom1_Click()
'Por.Dante Amor
    '
    MsgBox "Presionaste el botón " & tbxCustom1.Name
End Sub

2. En tu formulario, hasta arriba de todo el código (Declaraciones) pon la siguiente línea:

Dim colBoton As Collection 'Collection de botones

3. Actualiza tu código:

Private Sub UserForm_Activate()
    Dim l As Integer
    Dim clsObject As Clase1
    Set colBoton = New Collection
    '
    For l = 1 To 3
        Set BotonObjeto = Controls.Add("Forms.CommandButton.1")
        With BotonObjeto
            .Name = "Boton_Prueba" & l
            .Caption = "BOTÓN " & l
            .FontSize = 7
            .FontName = Arial
            .BackColor = &H396864
            .ForeColor = &H8000000E
            .Width = 98
            .Left = 18
            .Height = 16
            .Top = l * 20
        End With
        Set clsObject = New Clase1
        Set clsObject.tbxCustom1 = Me.Controls("Boton_Prueba" & l) 'BotonObjeto
        colBoton.Add clsObject
    Next
End Sub

Nota: No es necesaria la variable BotonObjeto, además revisa bien tu código, porque tienes esto:

BotonObjeto = "Boton_Prueba" & "l"

La variable   l   no debe ir entre comillas, debe ser así:

.Name = "Boton_Prueba" & l


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas