J'ai besoin de créer dynamiquement des étiquettes et des boutons, puis de les ajouter à un cadre dans un formulaire utilisateur. Comment puis-je faire cela? On dirait que devrait être être plus facile que c'est vraiment.Ajout de contrôles à une trame dans un formulaire utilisateur Excel avec VBA
Répondre
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
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
Pourquoi le "1" 'à la fin du nom de classe dans la méthode' add'? – Triztian
Je ne sais pas. Je sais que ça ne marche pas sans ça. –
Je voudrais vraiment savoir pourquoi il doit être "Forms.CommandButton.1" trop – FinancialRadDeveloper