web-dev-qa-db-fra.com

La quête de l'infobulle des fonctions personnalisées d'Excel

Cette question a été poséeavant , mais chaque fois que la réponse acceptée est simplement une démission pour fournir des descriptions de fonction en utilisant Application.MacroOptions ( VBA6 ) ( VBA7 ), mais ces informations n'apparaissent pas réellement sous forme d'infobulle, donc cela 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 (complément VBA, VSTO ou COM) et de donner à l'utilisateur 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:

enter image description here

enter image description here

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 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:

enter image description here

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 manière de le faire apparaître, et qu'il ne connaît à la place que l'info-bulle standard d'Excel, il ne verra que le nom de la formule et aucune aide supplémentaire:

enter image description here

Avec lequel ils n'ont aucune chance de fournir correctement les paramètres requis. (Sans lire la documentation, ce qui bien sûr, aucun utilisateur ne le fait jamais.)

Maintenant, un utilisateur expérimenté peut savoir qu'en tapant Ctrl+Shift+A, ils se verront attribuer une liste de paramètres de fonction remplie automatiquement comme suit:

enter image description here

Mais bien sûr, nous avons le même problème que ci-dessus, à savoir que les utilisateurs d'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é.

À ce stade, il devrait être clair 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 pu être convaincu que cela 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 infobulle peut tout simplement ne pas être extensible. Mais cette théorie est contestée 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 met à disposition ont les mêmes info-bulles que les fonctions Excel natives:

enter image description here

Certes, 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 sur la décompilation et voir si je peux faire de l'ingénierie inverse tout ce qui se passe dans la boîte à outils d'analyse.

Comment vous pouvez aider

Je suis presque certain d'avoir recherché toutes les informations accessibles au public sur ce problème. Si quelqu'un sait quelque chose que je ne sais pas qui pourrait aider à cela, n'hésitez pas à faire un carillon. Je ne connais pas très bien les dll/xll compilés en rétro-ingénierie, donc si quelqu'un a envie d'ouvrir sa copie locale d'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.

99
Alain

J'ai posté un projet de validation de principe sur GitHub en tant que projet Excel-DNA IntelliSense , en l'implémentant.

À l'aide des classes UI Automation pour surveiller les événements d'interface utilisateur Excel appropriés, un formulaire s'affiche le cas échéant.

Le code est encapsulé sous la forme d'un complément Excel-DNA et fonctionne sur ma machine Excel 2013/Windows 8. J'ai testé 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:

[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 l'aide d'argument

Argument Help

Cela a l'air bien, mais tout est encore très feuilleté, ne fonctionne que sur ma machine et plante parfois Excel. Ce pourrait être un début, cependant ...


Mise à jour du 9 mai 2014:

J'ai fait des progrès pour trouver 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. Quiconque voudrait aider avec cela devrait 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. Voir la page Mise en route sur GitHub pour les instructions.

39
Govert

Que diriez-vous

  1. Capturez la saisie de texte sur l'événement de pression de touche de la cellule. comme ça
  2. Vérifiez si le texte correspond aux fonctions personnalisées.
  3. S'il correspond, montrez quelque chose comme une étiquette ou une forme pour faire semblant d'être une info-bulle. comme ça

Est-ce acceptable?

C'est un peu moche mais plus facile.

1
Clxy

Qu'est-ce que XLL?

Un XLL est un DLL qui exporte plusieurs procédures qui sont appelées par Excel ou le gestionnaire de compléments Excel. http://msdn.Microsoft.com/en-us/library /office/bb687861.aspx

Comment développez-vous le XLL?

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

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

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

Comment obtenir des info-bulles?

  1. Implémentez votre fonction en tant que 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 info-bulles, une attention particulière pour: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Malheureusement, le complément Analysis Toolpak n'a pas non plus d'infobulles.

Ma solution était fausse, mais avec des informations erronées publiées par l'affiche originale. Afficher 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 demandait. Si vous trouvez une version d'Excel qui affiche des info-bulles de XLL, faites-le moi 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.

0
Marcos Zolnowski