2009-02-19 25 views

Respuesta

14

El código siguiente muestra cómo se puede rellenar dinámicamente un cuadro en un formulario de usuario con controles ...

En la forma que se utiliza Tenía un control marco llamado Frame1, por lo que en el UserForm_Initialize se llama Frame1.Controls. Agregar 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 ajustar el tamaño de los 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 
+5

Por qué el ' "1" 'al final del nombre de la clase en el método' add'? – Triztian

+0

No lo sé. Sé que no funciona sin eso. –

+0

Me gustaría saber por qué tiene que ser "Forms.CommandButton.1" también – FinancialRadDeveloper

4

Mi variación sobre el tema anterior. 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 utilizar con las etiquetas (o ver 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 
+0

cómo usar esos dieciséis botones? – Qbik

+0

@Qbik lee en "WithEvents" y ya verás. – Robino

+0

Lea también http://stackoverflow.com/questions/10130300/how-do-we-know-the-sender-of-the-buttons-in-vba – Robino

Cuestiones relacionadas