macro insertar formulario desde controles botones boton asignar abrir excel vba excel-vba userform

formulario - insertar boton en excel 2010



Agregar controles a un marco en una forma de usuario de Excel con VBA (2)

Necesito crear etiquetas y botones dinámicamente y luego agregarlos a un marco dentro de una forma de usuario. ¿Cómo hago esto? Parece que debería ser más fácil de lo que realmente es.


El siguiente código demuestra cómo puede rellenar dinámicamente un marco en una forma de usuario con controles ...

En la forma que utilicé, tenía un control de cuadro llamado Frame1, por lo que en UserForm_Initialize llamas Frame1.Controls.Add para incrustar un control en el marco. Puede configurar el control que se devuelve a una variable de control WithEvents que haya definido en el módulo de código UserForm para que pueda responder a los eventos en los controles que desee ...

Por lo tanto, con este método, debe pregrabar cualquier código de evento que desee para cualquier control que cree ...

También tenga en cuenta que puede colocar y clasificar sus controles incluso si las propiedades superior, izquierda, ancho y alto no aparecen necesariamente en intellisense ...

Private WithEvents Cmd As MSForms.CommandButton Private WithEvents Lbl As MSForms.Label Private Sub UserForm_Initialize() Set Lbl = Frame1.Controls.Add("Forms.Label.1", "lbl1") Lbl.Caption = "Foo" Set Cmd = Frame1.Controls.Add("Forms.CommandButton.1", "cmd1") End Sub Private Sub Cmd_Click() Cmd.Top = Cmd.Top + 5 End Sub Private Sub Lbl_Click() Lbl.Top = Lbl.Top + 5 End Sub


Mi variación sobre el tema de arriba. Sin embargo, esto es solo para una serie de botones de 4x4. Crea una forma de usuario y agrégala a su código. Los mismos conceptos se pueden usar con sus etiquetas (o vea la respuesta anterior):

Private cmdLots(20) As MSForms.CommandButton Private Sub UserForm_Initialize() For i = 1 To 4 For j = 1 To 4 k = i + (4 * j) Set cmdLots(k) = UserForm2.Controls.Add("Forms.CommandButton.1", "cmd1") With cmdLots(k) .Top = i * 25 .Left = (j * 80) - 50 .BackColor = RGB(50 * i, 50 * j, 0) .Caption = "i= " & i & " j= " & j End With Next j Next i End Sub