2017-07-21 2 views
1

J'ai un userform qui est utilisé pour générer des rapports. Dans le cas où je dois partager la forme de l'utilisateur avec quelqu'un, je partage la totalité de la feuille Excel. Est-il possible de faire le formulaire utilisateur existant comme un Add-in.so que, une fois installé, il peut être accessible à travers toute feuille Excel qui est ouverte et pas seulement cette feuille Excel particulier.Userform dans excel sheet-Peut-il être ajouté

Merci d'avance.

Répondre

-1

Oui, vous pouvez partager le formulaire utilisateur.

Faites un clic droit sur le formulaire utilisateur et exportez-le.

Et vous pouvez ajouter le formulaire en l'important.

Merci

2

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:

  1. Dans Classeur1/VBAProject, ajoutez une référence (Tools..References) au MyAddin.
  2. Dans MyAddIn, créez votre UserForm (MyUserForm)
  3. 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 
    
  4. 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.

  5. 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 
    
  6. 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