La búsqueda de la función personalizada de Excel tooltip


Esta pregunta se ha hecho antes de , pero cada vez que la respuesta aceptada es simplemente una renuncia para proporcionar descripciones de funciones utilizando Application.MacroOptions (VBA6) (VBA7 ), pero esta información en realidad no aparece como una sugerencia, por lo que no resuelve mi problema.

El Objetivo

Lo que todos deseamos es poder definir funciones personalizadas por cualquier medio (VBA, VSTO o COM add-in) y darle al usuario el beneficio de un pop-up / tool-tip descripción de la función y sus parámetros, como aparece para cada función de Excel incorporada, ya sea en línea o en la barra de fórmulas:

introduzca la descripción de la imagen aquí

introduzca la descripción de la imagen aquí

La respuesta ampliamente aceptada a esta necesidad es que no es posible para las funciones personalizadas, pero deseo desafiar esa creencia.

El Problema

Actualmente, lo mejor que he visto que alguien hace es definir funciones (a menudo usando la llamada de macroopciones anterior) para que cuando aparezca la función diálogo (el botón fx en la barra de fórmulas) las descripciones de sus funciones y parámetros aparecen de la siguiente manera:

introduzca la descripción de la imagen aquí

Como puede ver, esta es una función complicada con muchos parámetros. Si el usuario no es consciente de este diálogo de "argumentos de función" y cómo sacarlo, y en su lugar está familiarizado solo con la descripción de herramienta estándar de Excel, solo verá el nombre de la fórmula y no tendrá ayuda adicional:

introduzca la descripción de la imagen aquí

Con el que no tienen ninguna posibilidad de proporcionar correctamente la parámetros requeridos. (Sin leer la documentación, que por supuesto, ningún usuario lo hace.)

Ahora, un usuario avanzado puede saber que al escribir Ctrl+Shift+A , se les otorgará una lista autocompletada de parámetros de función como así:

introduzca la descripción de la imagen aquí

Pero, por supuesto, tenemos el mismo problema que el anterior, que es que los usuarios estándar de excel solo se usarán para el comportamiento predeterminado de la primera imagen y probablemente nunca habrán aprendido eso función.

Debería quedar claro en este punto por qué esto no es suficiente y queremos lo que cada función incorporada tiene - la herramienta en línea-tip que le dice al usuario cómo usar la función.

La broma

Al principio, podría haber estado 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 sugerencia de herramienta puede simplemente no ser extensible. Pero esa teoría es desafiada por la existencia de el complemento Analysis Toolpak. Claro, está construido en Microsoft, pero ANALYS32.xll es un complemento XLL independiente al igual que los que se pueden producir en VB, C, C++ y C#. Por supuesto, cuando este XLL se carga en la aplicación, las funciones que pone a disposición tienen las mismas herramientas-consejos de las funciones nativas de excel:

introduzca la descripción de la imagen aquí

Seguramente si esta información está codificada de alguna manera en este archivo XLL y se pasa a Excel, ¿hay una manera de replicarla con nuestros propios complementos? Soy en el punto ahora donde voy a empezar a enseñarme un poco sobre descompilación y ver si puedo hacer ingeniería inversa de lo que está pasando en el análisis toolpak.

Cómo Puedes Ayudar

Estoy casi seguro de que he investigado toda la información disponible públicamente sobre este problema. Si alguien sabe algo que yo desconozco que podría ayudar con esto, siéntase libre de intervenir. Estoy muy familiarizado con la ingeniería inversa compilado dll / xll, por lo que si alguien tiene ganas de abrir su copia local de Analysis32.xll y averiguar lo que está pasando con sus definiciones de funciones personalizadas, estaría muy agradecido. De lo contrario, seguiré indagando en esto hasta que haya llegado a todos los callejones sin salida e informe de lo que encuentre.

Author: Community, 2013-06-03

3 answers

He publicado un proyecto de prueba de concepto en GitHub como el proyecto Excel-DNA IntelliSense, implementando esto.

Usando las clases de UI Automation para monitorear los eventos apropiados de la interfaz de usuario de Excel, se muestra un formulario cuando es apropiado.

El código está envuelto como un complemento Excel-DNA, y funciona en mi máquina Excel 2013 / Windows 8. He probado en otra configuración (Excel 2010 de 64 bits en Windows Server 2008) y tuve problemas graves.

Para una función C# definida con los atributos Excel-DNA como esta:

[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;
}

Obtenemos tanto la descripción de la función

Descripción de la Función

Y al seleccionar la función, obtenemos el argumento help

Ayuda de Argumento

Eso se ve bien, pero todo sigue siendo muy escamoso, solo funciona en mi máquina y a veces se bloquea Excel. Aunque podría ser un comienzo...


Actualización del 9 de mayo de 2014:

He hecho algunos progresos para averiguar cómo hacer que el argumento ayude a trabajar bajo Versiones de Excel y Windows. Sin embargo, todavía necesita mucho trabajo para obtener todo confiable. Cualquier persona que quiera ayudar con esto debe ponerse en contacto conmigo directamente.


Actualización del 18 de junio de 2016:

Ahora se está probando la compatibilidad con Excel UDF IntelliSense para complementos de Excel-DNA y funciones de VBA. Consulte la página Introducción en GitHub para obtener instrucciones.

 39
Author: Govert,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-06-19 18:22:00

¿Qué tal

  1. Capture la introducción de texto en el evento de prensa de tecla de la celda. así
  2. Compruebe si el texto coincide con funciones personalizadas.
  3. Si coincide, muestra algo como etiqueta o forma para fingir que es una descripción. así

Es esto aceptable?

Es un poco feo pero más fácil.

 1
Author: Clxy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:09:20

¿Qué es XLL?

Un XLL es un DLL que exporta varios procedimientos que son llamados por Excel o el Administrador de complementos de Excel. http://msdn.microsoft.com/en-us/library/office/bb687861.aspx

¿Cómo se desarrolla el XLL?

Excel XLL SDK con Visual C++ (o cualquier cosa que pueda compilar una DLL y llamar a los procedimientos del SDK)

¿Dónde puedo encontrar una guía rápida para crear un XLL simple?

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

¿Cómo obtengo información sobre herramientas?

  1. Implemente su función como un procedimiento y expórtela
  2. Implementar y exportar procedimiento xlAutoOpen (void) - http://msdn.microsoft.com/en-us/library/office/bb687860.aspx
  3. xlAutoOpen solo necesita llamar a xlfRegister - http://msdn.microsoft.com/en-us/library/office/bb687900.aspx
  4. Para las descripciones emergentes, atención especial para: pxArgumentText, pxFunctionHelp, pxArgumentHelp1

Lamentablemente, el complemento Analysis Toolpak tampoco tiene información sobre herramientas.

Mi solución estaba equivocada, pero con información incorrecta publicada por el póster original. Mostrando una imagen con BINOMDIST, si su link muestra claramente que esto no es una función de ANALIZADO32.xll.

Esto significa que estaba tratando de resolver una pregunta imposible. Porque no hay ningún XLL que pueda hacer lo que el poster pidió. Si encuentra una versión de Excel que muestra información sobre herramientas de XLLS, por favor házmelo saber.

Sobre lo que preguntó el poster, tratando de imitar el comportamiento XLL, estoy seguro de que mi respuesta fue la más correcta en relación con lo ANALIZADO32.lo haré.

 0
Author: Marcos Zolnowski,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-10 22:27:38