Oui, vous pouvez, mais, vous devez faire un peu de préparation.
Assurez-vous que votre addin a un nom de projet qui diffère du nom de votre classeur. Par exemple, si le projet du classeur de votre utilisateur est appelé VBAProject
, le nom de projet de votre complément doit être (et devrait être nommé quelque chose de plus approprié de toute façon) comme quelque chose comme MyAddin
.
Donc, vous avez:
Book1.xlsm
(Nom du projet = VBAProject
) et
MyAddin.xlam
(Nom du projet MyAddin
)
étapes:
- Dans Classeur1/VBAProject, ajoutez une référence (Tools..References) au
MyAddin
.
- Dans MyAddIn, créez votre UserForm (
MyUserForm
)
Pour liaison précoce, nous devons faire la forme instanciation PublicNotCreatable
, mais l'interface utilisateur VBE ne propose pas cette propriété pour les formes, donc nous avons besoin d'exporter la forme dans un dossier de fichiers, puis modifiez le fichier MyUserForm.frm
, en remplaçant l'attribut Attribute VB_Exposed
par True
(par défaut c'est False). C'est, dans un éditeur de texte, modifiez le fichier exporté nommé MyUserForm.frm
et ajuster la ligne existante comme suit:
Attribute VB_Exposed = True
Enregistrer les modifications du fichier, (supprimer la forme originale MyAddIn) puis importer le MyUserForm.frm dans le projet. Le nouveau formulaire utilisateur aura PublicNotCreatable
instanciation.
Ajouter une fonction d'usine publique à MyAddin
, qui va créer une nouvelle instance de la forme, et le retourner à tout VBA qu'il appelle:
Public Function GetUserForm() As MyUserForm
Set GetUserForm = New MyUserForm
End Function
En Book1.xlsm
, vous pouvez maintenant écrire du code comme ce qui suit, avec support complet de liaison anticipée.
Public Sub test()
Dim frm As MyAddin.MyUserForm
Set frm = MyAddin.GetUserForm()
frm.Show
End Sub