Cette question a été posée avant , mais à chaque fois la réponse acceptée est simplement une démission de fournir des descriptions de fonction à l' aide Application.MacroOptions
( VBA6 ) ( VBA7 ), mais cette information ne semble pas vraiment comme une info - bulle, il ne résout pas mon problème.
Le but
Ce que nous souhaitons tous, c'est pouvoir définir des fonctions personnalisées par tous les moyens (complément VBA, VSTO ou COM) et faire bénéficier l'utilisateur d'une description contextuelle / info-bulle de la fonction et de ses paramètres, comme apparaît pour chaque fonction Excel intégrée, en ligne ou dans la barre de formule:
La réponse largement acceptée à ce besoin est qu'il n'est pas possible pour les fonctions personnalisées, mais je souhaite contester cette croyance.
Le problème
Actuellement, le mieux que j'ai vu quelqu'un faire est de définir des fonctions (souvent en utilisant l'appel MacroOptions ci-dessus) de sorte que lorsque vous ouvrez la boîte de dialogue de fonction (le bouton fx dans la barre de formule), leurs descriptions de fonctions et de paramètres apparaissent comme ci-dessous:
Comme vous pouvez le voir, c'est une fonction compliquée avec de nombreux paramètres. Si l'utilisateur n'est pas au courant de cette boîte de dialogue «arguments de fonction» et de la façon de le faire apparaître, et n'est plutôt familier qu'avec l'info-bulle standard d'Excel, il ne verra que le nom de la formule et aucune aide supplémentaire:
Avec lequel ils n'ont aucune chance de fournir correctement les paramètres requis. (Sans lire la documentation, ce que, bien sûr, aucun utilisateur ne fait jamais.)
Maintenant, un utilisateur expérimenté peut savoir qu'en tapant Ctrl+ Shift+ A, il se verra attribuer une liste auto-complétée de paramètres de fonction comme ceci:
Mais bien sûr, nous avons le même problème que ci-dessus, à savoir que les utilisateurs Excel standard ne seront habitués qu'au comportement par défaut de la première image et n'auront probablement jamais appris cette fonctionnalité.
Il devrait être clair à ce stade pourquoi cela ne suffit pas et nous voulons ce que chaque fonction intégrée a - l'info-bulle en ligne qui indique à l'utilisateur comment utiliser la fonction.
Le taquin
Au début, j'aurais peut-être été convaincu que ce n'est tout simplement pas possible sauf avec les fonctions natives de l'application Excel. Les compléments et VBA sont des fonctionnalités d'extensibilité, et cette info-bulle peut simplement ne pas être extensible. Mais cette théorie est remise en question par l'existence du complément Analysis Toolpak. Bien sûr, il est intégré à Microsoft, mais ANALYS32.xll est un complément XLL autonome, tout comme ceux qui peuvent être produits en VB, C, C ++ et C #. Effectivement, lorsque ce XLL est chargé dans l'application, les fonctions qu'il rend disponibles ont les mêmes info-bulles que les fonctions Excel natives:
Si ces informations sont en quelque sorte encodées dans ce fichier XLL et transmises à Excel, il existe un moyen de les répliquer avec nos propres compléments? J'en suis maintenant au point où je vais commencer à m'apprendre un peu la décompilation et voir si je peux faire de l'ingénierie inverse tout ce qui se passe dans le toolpak d'analyse.
Comment vous pouvez aider
Je suis presque certain d'avoir recherché toutes les informations disponibles publiquement sur ce problème. Si quelqu'un sait quelque chose que je ne sais pas qui pourrait aider avec cela, n'hésitez pas à intervenir. Je ne suis pas familier avec le reverse-engineering de dll / xlls compilés, donc si quelqu'un a envie d'ouvrir sa copie locale de Analysis32.xll et comprendre ce qui se passe avec ses définitions de fonctions personnalisées, je serais très obligé. Sinon, je continuerai à creuser moi-même jusqu'à ce que j'aie atteint toutes les impasses et que je rapporte ce que je trouve.
Réponses:
J'ai publié un projet de preuve de concept sur GitHub en tant que projet Excel-DNA IntelliSense , mettant en œuvre cela.
En utilisant les classes UI Automation pour surveiller les événements appropriés de l'interface utilisateur Excel, un formulaire s'affiche le cas échéant.
Le code est enveloppé en tant que complément Excel-DNA et fonctionne sur ma machine Excel 2013 / Windows 8. J'ai testé sur une autre configuration (Excel 2010 64 bits sur Windows Server 2008) et j'ai eu de sérieux problèmes.
Pour une fonction C # définie avec les attributs Excel-DNA comme ceci:
on obtient à la fois la description de la fonction
et lors de la sélection de la fonction, nous obtenons une aide sur les arguments
Cela a l'air bien, mais tout est encore très floconneux, ne fonctionne que sur ma machine et plante parfois Excel. Cela pourrait être un début, cependant ...
Mise à jour du 9 mai 2014:
J'ai fait des progrès pour savoir comment faire fonctionner l'argument sous les anciennes versions d'Excel et de Windows. Cependant, il faut encore beaucoup de travail pour que tout soit fiable. Toute personne souhaitant apporter son aide doit me contacter directement.
Mise à jour du 18 juin 2016:
La prise en charge d'Excel UDF IntelliSense pour les compléments Excel-DNA et les fonctions VBA est en cours de test. Consultez la page de mise en route sur GitHub pour obtenir des instructions.
la source
Que diriez-vous
Est-ce acceptable?
C'est un peu moche mais plus facile.
la source
Qu'est-ce que XLL?
Comment développez-vous le XLL?
Où puis-je trouver un guide rapide pour créer un XLL simple?
Comment obtenir des info-bulles?
pxArgumentText, pxFunctionHelp, pxArgumentHelp1
Malheureusement, le complément Analysis Toolpak n'a pas non plus d'infobulles.
Ma solution était erronée, mais avec des informations erronées publiées par l'affiche originale. Affichage d'une image avec BINOMDIST, si son lien montre clairement que ce n'est pas une fonction de ANALYS32.xll.
Cela signifie que j'essayais de résoudre une question impossible. Parce qu'il n'y a pas de XLL qui puisse faire ce que l'affiche a demandé. Si vous trouvez une version d'Excel qui affiche des info-bulles de XLL, veuillez me le faire savoir.
À propos de ce que l'affiche a demandé, en essayant d'imiter le comportement XLL, je suis sûr que ma réponse était la plus correcte par rapport à ce que fait ANALYS32.xll.
la source