Question

Je dois créer des étiquettes et des boutons dynamiquement puis les ajouter à un cadre dans un userform. Comment puis-je faire cela? On dirait que ce devraient être plus facile que c'est vraiment.

Était-ce utile?

La solution

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.Add pour incorporer un contrôle dans le cadre. Vous pouvez régler la commande qui est renvoyée à un WithEvents variable de contrôle que vous avez défini dans le module de code UserForm afin que vous puissiez répondre à des événements sur commandes de votre ... voulez

Donc, avec cette méthode, vous devez pré-écrire tout code d'événement que vous souhaitez pour tous les contrôles que vous créez ...

Notez également que vous pouvez positionner et dimensionner vos commandes même si le haut, à gauche, la largeur et la hauteur de propriétés ne viennent 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

Autres conseils

Ma variation sur le thème ci-dessus. Ceci est juste pour un tableau 4x4 de boutons bien. Créer un formulaire et ajouter à 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
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top