99 votes

La quête de l'infobulle de la fonction personnalisée d'Excel

Cette question a été a demandé antes de mais à chaque fois, la réponse acceptée est simplement une résignation à fournir des descriptions de fonction en utilisant Application.MacroOptions ( VBA6 ) ( VBA7 ), mais cette information n'apparaît pas réellement sous forme d'infobulle, ce qui ne résout pas mon problème.

L'objectif

Ce que nous souhaitons tous, c'est de pouvoir définir des fonctions personnalisées par n'importe quel moyen (VBA, VSTO ou complément COM) et de donner à l'utilisateur l'avantage d'une description de la fonction et de ses paramètres sous forme de pop-up/tool-tip, comme cela apparaît pour chaque fonction Excel intégrée, soit en ligne, soit dans la barre de formule :

enter image description here

enter image description here

La réponse largement acceptée à ce besoin est que ce n'est pas possible pour les fonctions personnalisées, mais je souhaite remettre en question cette croyance.

Le problème

Actuellement, la meilleure chose que j'ai vue faire est de définir des fonctions (souvent en utilisant l'appel MacroOptions ci-dessus) de sorte que lorsque l'on fait apparaître le dialogue de fonction (le bouton fx dans la barre de formule), leur fonction et la description des paramètres apparaissent comme ci-dessous :

enter image description here

Comme vous pouvez le constater, il s'agit d'une fonction complexe comportant de nombreux paramètres. Si l'utilisateur n'est pas au courant de l'existence de cette boîte de dialogue "arguments de la fonction" et de la manière de la faire apparaître, et qu'il ne connaît que l'infobulle standard d'Excel, il ne verra que le nom de la formule et aucune aide supplémentaire :

enter image description here

Avec lesquels 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é pourrait savoir qu'en tapant Ctrl + Shift + A ils obtiendront une liste auto-complétée de paramètres de fonction comme suit :

enter image description here

Mais bien sûr, nous avons le même problème que ci-dessus, à savoir que les utilisateurs standard d'Excel seront uniquement habitués au comportement par défaut de la première image et n'auront probablement jamais appris cette fonctionnalité.

Il devrait être clair à ce stade que cela ne suffit pas et que nous voulons ce que chaque fonction intégrée possède - l'info-bulle en ligne qui indique à l'utilisateur comment utiliser la fonction.

L'allumeuse

Au début, j'aurais pu être convaincu que cela n'est tout simplement pas possible, sauf avec les fonctions natives de l'application Excel. Les compléments et le VBA sont des fonctions extensibles, et cette info-bulle n'est peut-être tout simplement pas extensible. Mais cette théorie est remise en question par l'existence du module complémentaire Analysis Toolpak. Bien sûr, il est construit dans Microsoft, mais ANALYS32.xll est un complément XLL autonome comme ceux qui peuvent être produits en VB, C, C++ et C#. Bien sûr, lorsque ce XLL est chargé dans l'application, la fonction fonctions qu'il met à disposition ont les mêmes info-bulles que les fonctions natives d'Excel :

enter image description here

Si ces informations sont en quelque sorte encodées dans ce fichier XLL et transmises à Excel, il existe certainement un moyen de les reproduire avec nos propres modules complémentaires ? J'en suis maintenant au point où je vais commencer à apprendre un peu la décompilation et voir si je peux faire de la rétro-ingénierie sur ce qui se passe dans le toolpak d'analyse.

Comment vous pouvez aider

Je suis presque certain d'avoir recherché toutes les informations publiques disponibles sur ce problème. Si quelqu'un sait quelque chose que je ne sais pas et qui pourrait m'aider, n'hésitez pas à m'en faire part. Je suis très peu familier avec la rétro-ingénierie des dlls / xlls compilées, donc si quelqu'un a envie d'ouvrir sa copie locale de Analysis32.xll et de comprendre ce qui se passe avec les définitions de fonctions personnalisées, je lui en serais très reconnaissant. Sinon, je vais continuer à creuser moi-même jusqu'à ce que j'aie trouvé toutes les impasses et rapporter ce que j'ai trouvé.

39voto

Govert Points 6031

J'ai publié un projet de démonstration sur GitHub sous le nom de Excel-DNA IntelliSense en mettant en œuvre ce projet.

En utilisant les classes d'automatisation de l'interface utilisateur pour surveiller les événements appropriés de l'interface utilisateur d'Excel, un formulaire est affiché au moment opportun.

Le code est enveloppé comme un Excel-ADN 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 un sérieux problème.

Pour une fonction C# définie avec les attributs Excel-DNA comme ceci :

[ExcelFunction(Description = 
    "A useful test function that adds two numbers, and returns the sum.")]
public static double AddThem(
    [ExcelArgument(Name = "Augend", 
                   Description = "is the first number, to which will be added")] 
    double v1,
    [ExcelArgument(Name = "Addend", 
                   Description = "is the second number that will be added")]     
    double v2)
{
    return v1 + v2;
}

nous obtenons à la fois la description de la fonction

Function Description

et lors de la sélection de la fonction, nous obtenons une aide à l'argumentation

Argument Help

Cela a l'air bien, mais tout cela reste très bancal, ne fonctionne que sur ma machine et fait parfois planter Excel. C'est peut-être un début, mais...


Mise à jour du 9 mai 2014 :

J'ai fait quelques progrès en trouvant comment faire fonctionner l'aide à l'argumentation 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 dans ce domaine est invitée à me contacter directement.

1voto

Clxy Points 329

Et si

  1. Capture la saisie de texte lors de l'événement de pression de touche de la cellule. comme ceci
  2. Vérifiez si le texte correspond aux fonctions personnalisées.
  3. Si elle correspond, elle affiche quelque chose comme une étiquette ou une forme pour faire semblant d'être une info-bulle. comme ceci

Est-ce acceptable ?

C'est un peu laid mais plus facile.

0voto

Marcos Zolnowski Points 836

Qu'est-ce que le XLL ?

Une XLL est une DLL qui exporte plusieurs procédures qui sont appelées par Excel ou le gestionnaire de modules complémentaires Excel. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

Comment développez-vous le XLL ?

Excel XLL SDK avec Visual C++ (ou tout ce qui peut compiler une DLL et appeler les procédures du SDK)

Où puis-je trouver un guide rapide pour créer un simple XLL ?

http://support.microsoft.com/kb/178474

Comment obtenir des infobulles ?

  1. Implémentez votre fonction comme une procédure et exportez-la
  2. Implémenter et exporter la procédure xlAutoOpen(void) -. http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen a juste besoin d'appeler xlfRegister -. http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. Pour les infobulles, une attention particulière pour : pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Malheureusement, le complément Analysis Toolpak ne dispose pas non plus d'infobulles.

Ma solution était erronée, mais avec des informations erronées postées par le posteur original. Montrer une photo avec BINOMDIST, si son enlace 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 peut faire ce que le poster demande. Si vous trouvez une version d'Excel qui affiche les infobulles des XLL, faites-le moi savoir.

Pour ce qui est de la question posée par le posteur, à savoir essayer d'imiter le comportement de la XLL, je suis sûr que ma réponse était la plus correcte par rapport à ce que fait ANALYS32.xll.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X