VBA - Comment créer un objet UserForm dans un module de classe
- Conditions préalables
- Le code
- Le module de classe
- La fonction appelante
Conditions préalables
Accédez à Options Excel > Gestion de la confiance > Paramètres de macro et assurez-vous que l'option suivante est activée: Confirmez l'accès au modèle d'objet de projet VBA .Le code nécessite également les références ci-dessous, à savoir la bibliothèque d'objets Microsoft Forms 2.0 et Microsoft Visual Basic pour Applications Extensibility 5.3 . Vous pouvez les activer en cliquant sur le menu Outils de l' éditeur VBA, puis sur Références .
Le code
Dans cet exemple, nous allons créer un formulaire utilisateur contenant deux boutons. En cliquant sur ces boutons, leur légende sera affichée dans le code de la fonction appelante.Le module de classe
Créez un module de classe dans votre projet VBA, nommez-le PremierExemple (propriété ClassName) et insérez le code suivant:Option explicite'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!
'Activer les références suivantes (Outils> Références)
'Bibliothèque d'objets Microsoft Forms 2.0
'Microsoft Visual Basic pour Extensibility d'applications 5.3
'!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!
MaForm publique comme objet 'Userform
Bouton public WithEvents en tant que bouton MSForms.CommandButton
Dico Public As Object 'Objet Dictionnary = Collection d'objets
Nom privé comme String 'Nom => créer ou supprimer un formulaire utilisateur
Private Sub Class_Initialize ()
'créer une classe
Set Dico = CreateObject ("Scripting.dictionary")
End Sub
Valeur de la fonction publique ()
'La méthode Value de notre Classe permet la création du formulaire utilisateur
'et retourne une valeur
NewUsf "Mon premier UserForm" 'creation of userform
NewBouton "toto", "TOTO", 120, 30, 5, 5 'crée le bouton TOTO.
NewBouton "titi", "TITI", 120, 30, 5, 35 'créer le bouton TITI
formulaire utilisateur d'affichage 'maForm.Show'
Sur erreur GoTo fin
Value = maForm.Tag 'assigne la valeur contenue dans la balise du userform à notre fonction.
Décharger maForm
Fonction de sortie
ailette:
Fonction de fin
Private Sub NewUsf (monCaption As String)
'Création de userform
Définir maForm = ThisWorkbook.VBProject.VBComponents.Add (3)
Nom = maForm.Name
VBA.UserForms.Add (Nom)
Définir maForm = UserForms (UserForms.Count - 1)
Avec maForm
.Caption = monCaption
.Largeur = 150
.Hauteur = 100
Terminer par
End Sub
Public Sub NewBouton (Nom en tant que chaîne, Légende en tant que chaîne, Largeur en tant que double, Hauteur en tant que double, Gauche en tant que double, Haut en tant que double)
'Création d'un bouton de commande
Dim Obj
Définissez Obj = maForm.Controls.Add ("forms.CommandButton.1")
Si Obj = True, puis quitter Sub
Dim Cls comme nouveau PremierExemple
Définir cls.maForm = maForm
Définir cls.Bouton = Obj
Avec cls.bouton
.Name = Nom
.Caption = Légende
Déplacer vers la gauche, le haut, la largeur, la hauteur
Terminer par
Dico.Add Nom, cls
Set cls = Nothing
End Sub
Sous Privé Bouton_Click ()
'procédure d'événement pour un clic sur un bouton
maForm.Tag = Bouton.Caption
maForm.Hide
End Sub
Private Sub Class_Terminate ()
'suppression de classe
Dim VBComp As VBComponent
Set Dico = Nothing 'supprimer toutes les occurrences de notre classe => tous les boutons
Si Nom "" Alors "s'il s'agit du formulaire utilisateur (l'instance unique ayant la propriété" Nom "renseignée)
Définir la recherche de VBComp = ThisWorkbook.VBProject.VBComponents (Nom)
ThisWorkbook.VBProject.VBComponents.Remove VBComp 'delete
Fin si
End Sub
La fonction appelante
La procédure pour la fonction d'appel est grandement simplifiée ... grâce au module de classe, vous avez accès à un userform et à une méthode Value. Il est renvoyé simplement en utilisant le code d'appel ci-dessous:Sous test ()Dim MyForm comme nouveau PremierExemple
MsgBox MyForm.Value
Définir MyForm = Nothing
End Sub