son que negocios las inteligencia herramientas ejemplos datos analisis excel vba excel-vba

excel - que - Cómo poner una información sobre herramientas en una función definida por el usuario



inteligencia de negocios excel (9)

Professional Excel Development de Stephen Bullen describe cómo registrar UDF, lo que permite que una descripción aparezca en el cuadro de diálogo Argumentos de funciones:

Function IFERROR(ByRef ToEvaluate As Variant, ByRef Default As Variant) As Variant If IsError(ToEvaluate) Then IFERROR = Default Else IFERROR = ToEvaluate End If End Function Sub RegisterUDF() Dim s As String s = "Provides a shortcut replacement for the common worksheet construct" & vbLf _ & "IF(ISERROR(<expression>, <default>, <expression>)" Application.MacroOptions macro:="IFERROR", Description:=s, Category:=9 End Sub Sub UnregisterUDF() Application.MacroOptions Macro:="IFERROR", Description:=Empty, Category:=Empty End Sub

De: http://www.ozgrid.com/forum/showthread.php?t=78123&page=1

Para mostrar el cuadro de diálogo Argumentos de funciones, escriba el nombre de la función y presione Ctrl A. Alternativamente, haga clic en el símbolo "fx" en la barra de fórmulas:

En Excel 2007, ¿cómo agrego una descripción y sugerencias de parámetros a una función definida por el usuario? Cuando comienzo a escribir una invocación de función para una función incorporada, Excel muestra una descripción y una lista de parámetros: una información sobre herramientas. Me gustaría hacer lo mismo para las funciones que defino.

No solo para el asistente de inserción de fórmula, sino en el cuadro de fórmula, de modo que si selecciono "=myFun(" , en el "(" la información sobre herramientas aparece como lo hace para "=average("

No hay ayuda en la Ayuda de VBA, ninguno en MSDN y ninguno en ninguno de los foros dedicados de Excel y VBA que puedo encontrar, por lo que es claramente una posibilidad remota.


El método de @ will es el mejor. Simplemente agregue algunas líneas sobre los detalles para las personas que no usaron ExcelDNA antes como yo.

Descargue Excel-DNA IntelliSense de https://github.com/Excel-DNA/IntelliSense/releases

Hay dos versiones, una es para 64, verifique su versión de Excel. Para mi caso, estoy usando la versión 64.

Abra Excel / Developer / Add-Ins / Browse y seleccione ExcelDna.IntelliSense64.xll.

Inserte una nueva hoja, cambie el nombre a " IntelliSense ", agregue la descripción de la función, como https://github.com/Excel-DNA/IntelliSense/wiki/Getting-Started

¡Entonces disfruta! :)


Lamentablemente, no hay forma de agregar información sobre herramientas para argumentos UDF.
Para extender la respuesta de Remou, puede encontrar un enfoque más completo pero más complejo de las descripciones para el Asistente de funciones en
http://www.jkp-ads.com/Articles/RegisterUDF00.asp


Mucho baile alrededor de la respuesta. Puede agregar la ayuda contextual de UDF, pero debe exportar el Módulo y editar los contenidos en un editor de texto, y luego volver a importarlo a VBA. Este es el ejemplo de Chip Pearson: Agregar atributos de código


No es una solución de sugerencias, sino una solución adecuada:

Comience a escribir el UDF =MyUDF( luego presione CTRL + Shift + A y se mostrarán los parámetros de su función. Siempre que esos parámetros tengan nombres significativos, al menos tendrá un aviso viable

Por ejemplo, esto:

=MyUDF( + CTRL + Shift + A

Se convierte en esto:

=MyUDF(sPath, sFileName)


Probé el enfoque de @ ScottK, primero como una característica secundaria de mi UDF funcional, luego como una versión de sufijo _Help independiente cuando tuve problemas (ver a continuación). En retrospectiva, el último enfoque es mejor de todos modos, más obvio para un usuario que está atento a ver una información sobre herramientas y no satura el código funcional.

Pensé que si un usuario desatento simplemente tecleaba el nombre de la función y cerraba los paréntesis mientras lo pensaba, aparecería la ayuda y él estaría en camino. Pero arrojar un montón de texto en una sola celda que no puedo formatear no parecía una buena idea. En cambio, cuando la función se ingresa en una celda sin argumentos, es decir,

= interpolateLinear() or = interpolateLinear_Help()

un msgBox se abre con el texto de ayuda. Un msgBox está limitado a ~ 1000 caracteres, tal vez sea 1024. Pero eso es suficiente (apenas 8 ^ /) para mi función de interpolación demasiado trucada. Si no es así, siempre puede abrir un formulario de usuario e ir a la ciudad.

La primera vez que se abrió el cuadro de mensaje, parecía un éxito. Pero hay un par de problemas. Primero, por supuesto, el usuario debe saber ingresar a la función sin argumentos (+1 para el sufijo _Help UDF).

El gran problema es que msgBox se vuelve a abrir varias veces seguidas, de forma espontánea, mientras trabaja en partes no relacionadas del libro de trabajo. No hace falta decir que es muy molesto. A veces continúa hasta que recibo una advertencia circular de referencia. Imagínate. Si una UDF pudiera cambiar la fórmula de la celda, lo habría hecho para callarla.

No sé por qué Excel siente la necesidad de volver a calcular la fórmula una y otra vez; ni el _Ayuda independiente, ni la versión completa (en modo de ayuda) tiene precedentes o dependientes. No hay una declaración de aplicación. Volátil en ninguna parte. Por supuesto, la función devuelve un valor a la celda llamante. Tal vez eso desencadena el recalc? Pero eso es lo que hacen las UDF. No creo que puedas devolver un valor.

Como no puede modificar una fórmula de hoja de cálculo desde una UDF, traté de devolver una cadena específica, un valor, a la celda de llamada (la única que puede cambiar el valor de una UDF), suponiendo que inspeccionaría la valor de celda usando application.caller en el siguiente ciclo, detectar mi cadena y saber que no volveré a mostrar el mensaje de ayuda. Parecía una buena idea en ese momento, no funcionó. Tal vez hice algo estúpido en mi estado privado de sueño. Todavía me gusta la idea. Lo actualizaré cuando (si) soluciono el problema. Mi solución rápida fue agregar una línea en el cuadro de ayuda: " Buscar ayuda solo en una emergencia. Eliminar la fórmula ofensiva para terminar con la miseria".

Mientras tanto, probé el enfoque Application.MacroOptions. Bastante fácil, y parece profesional. Solo un problema para resolver. Voy a publicar una respuesta por separado sobre ese enfoque más adelante.


Sé que has aceptado una respuesta para esto, pero ahora hay una solución que te permite obtener un recuadro de terminación de estilo intellisense como para las otras funciones de Excel, a través de un complemento de Excel-DNA, o registrando un servidor intellisense dentro de tu propio complemento. Ver aquí .

Ahora, prefiero la forma C # de hacerlo, es mucho más simple, como en Excel-DNA, cualquier clase que implemente IExcelAddin es recogida por el marco addin y tiene AutoOpen() y AutoClose() ejecutados cuando abres / cierras el complemento in. Entonces solo necesitas esto:

namespace MyNameSpace { public class Intellisense : IExcelAddIn { public void AutoClose() { } public void AutoOpen() { IntelliSenseServer.Register(); } } }

y luego (y esto solo se toma de la página github), solo necesitas usar las anotaciones ExcelDNA en tus funciones:

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

que se anotan utilizando las anotaciones de ExcelDNA, el servidor intellisense recogerá los nombres y las descripciones de los argumentos.

Hay ejemplos para usarlo solo con VBA también, pero no estoy muy interesado en mi VBA, así que no uso esas partes.


Solo creo una versión de "ayuda" de la función. Aparece justo debajo de la función en autocompletar; el usuario puede seleccionarla en su lugar en una celda adyacente para obtener instrucciones.

Public Function Foo(param1 as range, param2 as string) As String Foo = "Hello world" End Function Public Function Foo_Help() as String Foo_Help = "The Foo function was designed to return the Foo value for a specified range a cells given a specified constant." & CHR(10) & "Parameters:" & CHR(10) & " param1 as Range : Specifies the range of cells the Foo function should operate on." & CHR(10) &" param2 as String : Specifies the constant the function should use to calculate Foo" &" contact the Foo master at [email protected] for more information." END FUNCTION

Los retornos de carro mejoran la legibilidad con la conversión de palabras activada. 2 pájaros de un tiro, ahora la función tiene algo de documentación.


También puede usar esta Macro para asignar Descripciones a argumentos y la UDF:

Private Sub RegisterMyFunction() Application.MacroOptions _ Macro:="SampleFunction", _ '''' Your UDF name Description:="calculates a result based on provided inputs", _ Category:="My UDF Category", _ '''' Or use numbers, a list in the link below ArgumentDescriptions:=Array( _ '''' One by each argument "is the first argument. tell the user what it does", _ "is the second argument. tell the user what it does") End Sub

Créditos a Kendall y el post original here . Para las categorías UDF