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.
Respuestas:
Publiqué un proyecto de prueba de concepto en GitHub como el proyecto Excel-DNA IntelliSense , implementando esto.
Usando las clases de Automatización de la IU para monitorear los eventos de la interfaz de usuario de Excel apropiados, se muestra un formulario cuando corresponde.
El código está empaquetado como un complemento de Excel-DNA y funciona en mi máquina Excel 2013 / Windows 8. Probé en otra configuración (Excel 2010 de 64 bits en Windows Server 2008) y tuve problemas graves.
Para una función de C # definida con los atributos de Excel-DNA como este:
obtenemos tanto la descripción de la función
y al seleccionar la función, obtenemos la ayuda del argumento
Eso se ve bien, pero todavía es muy inestable, solo funciona en mi máquina y, a veces, falla Excel. Aunque podría ser un comienzo ...
Actualización 9 de mayo de 2014:
He progresado un poco al descubrir cómo hacer que la ayuda del argumento funcione en versiones anteriores de Excel y Windows. Sin embargo, todavía se necesita mucho trabajo para que todo sea confiable. Cualquiera que desee ayudar con esto debe comunicarse conmigo directamente.
Actualización 18 de junio de 2016:
Se está probando la compatibilidad de Excel UDF IntelliSense para complementos de Excel-DNA y funciones VBA. Consulte la página de Introducción en GitHub para obtener instrucciones.
fuente
Qué tal si
¿Es esto aceptable?
Es un poco feo pero más fácil.
fuente
¿Qué es XLL?
¿Cómo se desarrolla el XLL?
¿Dónde puedo encontrar una guía rápida para crear un XLL simple?
¿Cómo obtengo información sobre herramientas?
pxArgumentText, pxFunctionHelp, pxArgumentHelp1
Lamentablemente, el complemento Analysis Toolpak tampoco tiene información sobre herramientas.
Mi solución fue incorrecta, pero con información incorrecta publicada por el póster original. Mostrando una imagen con BINOMDIST, si su enlace muestra claramente que esta no es una función de ANALYS32.xll.
Esto significa que estaba tratando de resolver una pregunta imposible. Porque no hay ningún XLL que pueda hacer lo que pidió el cartel. Si encuentra una versión de Excel que muestre información sobre herramientas de XLL, hágamelo saber.
Sobre lo que preguntaba el cartel, tratando de imitar el comportamiento de XLL, estoy seguro de que mi respuesta fue la más correcta en relación a lo que hace ANALYS32.xll.
fuente