2009-02-19 7 views

Répondre

14

Le code suivant montre comment vous pouvez remplir dynamiquement un cadre dans un userform avec des commandes ...

Dans la forme, j'utilisé que j'avais un contrôle cadre nommé Frame1, donc dans le UserForm_Initialize vous appelez Frame1.Controls. Ajouter pour incorporer un contrôle dans le cadre. Vous pouvez définir le contrôle qui est renvoyé à une variable de contrôle WithEvents que vous avez définie dans le module de code UserForm afin que vous puissiez répondre aux événements sur les contrôles souhaités ...

Donc, avec cette méthode, vous devez pré-écrire Notez également que vous pouvez positionner et dimensionner vos contrôles même si les propriétés de haut, de gauche, de largeur et de hauteur ne s'affichent pas nécessairement dans 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

Pourquoi le "1" 'à la fin du nom de classe dans la méthode' add'? – Triztian

+0

Je ne sais pas. Je sais que ça ne marche pas sans ça. –

+0

Je voudrais vraiment savoir pourquoi il doit être "Forms.CommandButton.1" trop – FinancialRadDeveloper

4

Ma variation sur le thème ci-dessus. Ceci est juste pour un tableau de 4x4 de boutons cependant. Créez un userform et ajoutez-le à son code. Les mêmes concepts peuvent être utilisés avec vos étiquettes (ou voir la réponse précédente):

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

comment utiliser ces seize boutons? – Qbik

+0

@Qbik lire sur "WithEvents" et vous verrez. – Robino

+0

Lisez aussi http://stackoverflow.com/questions/10130300/how-do-we-know-the-sender-of-the-buttons-in-vba – Robino

Questions connexes