Esta pregunta se ha hecho antes , pero cada vez que la respuesta aceptada es simplemente una renuncia para proporcionar descripciones de funciones usando Application.MacroOptions
( VBA6 ) ( VBA7 ), pero esta información en realidad no aparece como información sobre herramientas, por lo que no resuelve mi problema.
La meta
Lo que todos deseamos es poder definir funciones personalizadas por cualquier medio (complemento VBA, VSTO o COM) y brindarle al usuario el beneficio de una descripción emergente / emergente de la función y sus parámetros, como aparece para cada función incorporada de Excel, ya sea en línea o en la barra de fórmulas:
La respuesta ampliamente aceptada a esta necesidad es que no es posible para funciones personalizadas, pero deseo desafiar esa creencia.
El problema
Actualmente, lo mejor que he visto hacer a alguien es definir funciones (a menudo usando la llamada MacroOptions anterior) de modo que cuando aparezca el cuadro de diálogo de función (el botón fx en la barra de fórmulas), sus descripciones de funciones y parámetros aparezcan como se muestra a continuación:
Como puede ver, esta es una función complicada con muchos parámetros. Si el usuario no conoce este diálogo de "argumentos de función" y cómo abrirlo, y en cambio está familiarizado solo con la información sobre herramientas estándar de Excel, solo verá el nombre de la fórmula y ninguna ayuda adicional:
Con lo cual no tienen posibilidad de proporcionar correctamente los parámetros requeridos. (Sin leer la documentación, lo que, por supuesto, ningún usuario lo hace).
Ahora, un usuario avanzado puede saber que al escribir Ctrl+ Shift+ A, se le otorgará una lista de parámetros de función completada automáticamente como esta:
Pero, por supuesto, tenemos el mismo problema que el anterior, que es que los usuarios de Excel estándar solo estarán acostumbrados al comportamiento predeterminado de la primera imagen y probablemente nunca hayan aprendido esa función.
En este punto, debe quedar claro por qué esto no es suficiente y queremos lo que tiene cada función incorporada: la información sobre herramientas en línea que le dice al usuario cómo usar la función.
El tease
Al principio, podría haberme convencido de que esto simplemente no es posible excepto con las funciones nativas de la aplicación Excel. Los complementos y VBA son características de extensibilidad, y esta información sobre herramientas puede simplemente no ser extensible. Pero esa teoría se ve desafiada por la existencia del complemento Analysis Toolpak. Claro, está integrado en Microsoft, pero ANALYS32.xll es un complemento XLL independiente como los que se pueden producir en VB, C, C ++ y C #. Efectivamente, cuando este XLL se carga en la aplicación, las funciones que pone a disposición tienen la misma información sobre herramientas de las funciones nativas de Excel:
Seguramente si esta información se codifica de alguna manera en este archivo XLL y se pasa a Excel, ¿hay una manera de replicarla con nuestros propios complementos? Ahora estoy en el punto en el que voy a empezar a aprender un poco sobre la descompilación y ver si puedo aplicar ingeniería inversa a lo que esté sucediendo en el paquete de herramientas de análisis.
Cómo puedes ayudar
Estoy casi seguro de haber investigado toda la información disponible públicamente sobre este problema. Sin embargo, si alguien sabe algo que no sé que podría ayudar con esto, no dude en intervenir. No estoy muy familiarizado con dlls / xlls compilados de ingeniería inversa, así que si alguien tiene ganas de abrir su copia local de Analysis32.xll y Averiguar qué está pasando con sus definiciones de funciones personalizadas, estaría muy agradecido. De lo contrario, seguiré investigando esto yo mismo hasta que llegue a todos los callejones sin salida e informe lo que encuentre.