miércoles, 19 de noviembre de 2014

VBA: Cómo añadir descripciones de ayuda a nuestras funciones personalizadas (UDF) en Excel 2010 y +.

Un tema recurrente en los habituales de la programación de VBA para Excel siempre ha sido poder incorporar a nuestras funciones personalizadas, los textos descriptivos a cada argumento de la función (UDF), de manera simialr a como aparecen en el resto de funciones estándar.

Aprovechando la cuestión planteada por un usuario daremos solución al tema:

...Necesito saber cómo puedo programar mis propios tooltips en las funciones personalizadas de Exel que yo haga, igual como se muestran cuando uno digita cualquier función de Excel, que muestra en un recuadro y marcado con negrita los diferentes argumentos que se usan en cada función.
Ya sé crear mis propias funciones pero solo me falta agregarles ese detalle que lo considero importante...



Hace ya bastante tiempo expliqué, en versiones en versiones anteriores cómo asignar una UDF a una categoría dentro de la biblioteca de funciones o como incorporarle una descripción general...ver; sin embargo hoy, y para versiones de Excel 2010 y superiores, veremos como Microsoft ha habilitado un mayor control sobre nuestras funciones, permitiendo, fácilmente añadir descripciones para nuestros diferentes argumentos.

Partiremos de una sencilla UDF creada por nosotros, por ejemplo:

Function FxExcelforo(Texto1 As String, Texto2 As String, Separador As String) As String
'Devuelve una cadena que se creó uniendo subcadenas contenidas en una matriz.
FxExcelforo = Join(Array(Texto1, Texto2), Separador)
End Function



El siguiente código lo añadiremos nuestro código asociándolo a un Módulo; para ello accederemos a la ventana de código del explorador del editor de VBA. Es importante ejecutarlo para ver reflejados los cambios sobre nuestra UDF:

Sub DescribeFxExcelforo()
'A ejecutar una vez para añadir características a nuestra función

'definimos las variables a emplear...
Dim NombreFx As String
Dim DescripFx As String
Dim Categoria As String
'generamos una matriz de 3 elementos, uno por cada elementos/argumento de nuestra función
Dim DescripArgumentos(1 To 3) As String

'les asignamos valor
NombreFx = "FxExcelforo"
DescripFx = "Devuelve concatenada los dos primeros argumentos, empleando el caracter 'separador'."
Categoria = 7 'La categoría incluye nuestra función personalizada como tipo TEXTO
DescripArgumentos(1) = "Primera Cadena de texto a unir."
DescripArgumentos(2) = "Segunda Cadena de texto a unir."
DescripArgumentos(3) = "Caracter empleado como 'Separador'"

'Aplicamos el método MacroOptions
Application.MacroOptions _
   Macro:=NombreFx, _
   Description:=DescripFx, _
   Category:=Categoria, _
   ArgumentDescriptions:=DescripArgumentos      'nuevo parámetro del método
        'que inserta las descripciones de los argumentos de una UDF
        'que se muestran en el cuadro de diálogo Argumentos de función.
End Sub



Tras ejecutar nuestro procedimiento Sub, veremos en la ventana diálogo de la función, las diferentes descripciones añadidas para cada argumento, así como la descripción general de la función.... como vemos en la imagen siguiente:

VBA: Cómo añadir descripciones de ayuda a nuestras funciones personalizadas (UDF) en Excel 2010 y +.



Observamos remarcado en amarillo la descripción del argumento, y en rojo la descripción general de la función.. coincidente con los textos indicados en el procedimiento 'DescribeFxExcelforo'.

8 comentarios:

  1. Hola
    Yo hice algunas funciones pero las puse como add-in. Al querer usar éste código me muestra la leyenda de que no puedo modificar macros en un libro oculto. Como lo puedo solucionar???

    ResponderEliminar
    Respuestas
    1. Hola Miguel Ángel,
      al crear un complemento para Excel en formato .xlam debes considerar que el código será empleado bajo cualquier circunstancia, por lo que deberás tenerlo en cuenta en la programación para que sea lo más genérico posible, evitando particularidades de un libro concreto.
      Obviamente, al guardarlo como complemento estás haciendo inaccesible (normalmente) el código guardado...

      Habitualmente, cuando se quiere emplear en un mismo PC, en los diferentes libros de trabajo, un mismo código VBA, se guarda en el Libro de macros personal.

      Saludos

      Eliminar
  2. Hola. Estoy utilizando esta Sub para agregar información a las opciones de la función programada. Puede ser que solo funcione para el asistente de fórmulas? Digo porque a veces uno escribe las funciones y a medida que las va escribiendo Excel va mostrando ayuda sobre la función y sobre los parámetros a medida que se va escribiendo. Gracias.

    ResponderEliminar
    Respuestas
    1. Hola Guille,
      correcto, no aparece en la etiqueta descriptiva que se despliega la escribir la función directamente sobre las celdas...
      Un saludo

      Eliminar
  3. Ismael, gusto de saludarte. Al ponerlo en Personal.xlbs, la macro y la función van en un modulo?. Y en ThisWorkbook no va ningún código?

    ResponderEliminar
    Respuestas
    1. Hola Jorge,
      si grabas una macro en el Libro de macros personal, el código queda guardado en el Libro Personal.xlb (en algún módulo de dicho libro) y no del libro de trabajo...
      Los códigos empleados en Thisworbook quedarán en el libro de trabajo NO en el personal.
      Saludos

      Eliminar
    2. Ismael, gracias por tu pronta respuesta. Puse la UDF, y el código en un mismo modulo de la carpeta personal, y aparentemente no lo reconoce.
      La función aparece, como una más de Funciones definidas por el usuario, y con el siguiente nombre: Personal.xlsb!FxExcelForo; y en el formulario aparece lo siguiente:
      Personal.xlsb!FxExcelForo(Texto1,Texto2,Separador)
      No hay ayuda disponible

      No aparece ninguna descripción. Tendrías a bien explicarme cual es el inconveniente
      Gracias

      Eliminar
    3. Hola Jorge,
      es normal el tenerlo que escribirlo así, ya que en realidad la macro está en otro libro...
      Respecto a las descripciones tendrías que ejecutar una segunda macro para indicarle las descripciones que dispongas.
      Echa un vistazo a:
      http://excelforo.blogspot.com.es/2014/11/vba-como-anadir-descripciones-de-ayuda.html

      Saludos

      Eliminar