Funciones personalizadas UDF en Excel disponibles en todos los archivos abiertos

Siguiendo con el tema de funciones personalizadas (UDF), tenemos 2 funciones que anteriormente ya les había compartido en este Blog, con la salvedad de que vamos a ver cómo las podemos tener siempre disponibles en todos los archivos abiertos, además de crear una categoría que las aloje.

Funciones siempre disponibles

Para que una función personalizada esté siempre disponible primeramente deberemos tener el código de dicha función en un archivo de Excel, ya sea con extesión .xls o .xlsm. Posteriormente deberemos guardar nuestro archivo como complemento de Excel y añadirlo a la lista de complementos.

Ver video Funciones disponibles en todos los archivos abiertos

Suscríbete al canal de EXCELeINFO en YouTube para aprender más de Excel y macros.

Cómo lo hacemos

La función que usaremos es ExtraeNumero y el código es el siguiente.

Function ExtraeNumeros(celda As Variant)
Dim Largo As Integer
Dim i As Integer
Dim Valor As String
Dim Valor1 As String
Application.Volatile

Definimos el largo de la celda
Largo = Len(celda)

Recorremos cada caracter de la celda y validamos
sin es número
For i = 1 To Largo
    Valor = Mid(celda, i, 1)
    If Asc(Valor) >= 48 And Asc(Valor) <= 57 Then
        Valor1 = Valor1 & Valor
    Else
    End If
Next i

El valor concatenado de todos los números los asignamos
como resultado de la función
ExtraeNumeros = Valor1
End Function

Crear categoría para nuestra función

Para que nuestra función tenga su propia categoría, usamos el siguiente código también en el objeto ThisWorkbook.

Private Sub Workbook_Open()
    Call DescribeFunctionExtraeNumeros
End Sub

El código que describe la categoría de la función y sus argumentos
Private Sub DescribeFunctionExtraeNumeros()
    Dim NombreFunc As String        'nombre de la función
    Dim DescFunc As String          'descrición de la función
    Dim Categoria As String         'categoría de la función
    Dim DescArg(1 To 3) As String   'descripción de los argumentos
    '
    NombreFunc = "ExtraeNumeros"
    DescFunc = "Devuelve los caracteres numéricos de una referencia."
    Categoria = "MiCategoria"
    DescArg(1) = "Es la celda de donde se obtendrán los caracteres numéricos."
    '
    Application.MacroOptions _
            Macro:=NombreFunc, _
            Description:=DescFunc, _
            Category:=Categoria, _
            ArgumentDescriptions:=DescArg
End Sub

Guardar como complemento e instalarlo

Para cualquier modificación a futuro y como lo comentaba anteriormente, primero guardamos nuestro archivo en formato de Excel .xls o .xlsm. Cuando tengamos el código en los módulos ahora lo guardaremos como complemento con extensión .xla o .xlam. La diferencia es que los complementos .xlam sólo pueden abrir en Excel 2007 y posteriores. Por default los complementos se guardan en C:UsersUsuarioAppDataRoamingMicrosoftComplementos.

Guardar archivo de Excel como complemento

Figura 1. Guardar archivo de Excel como complemento.

Ya guardado nuestro complemento procedemos a instalarlo. En la pestaña Archivo elegimos Opciones. En el formulario de Opciones elegimos Complementos y después damos click en el botón Ir. En el formuario Complementos damos click en el botón Examinar y buscamos nuestro complemento en la ruta donde lo guardaron. Se añadirá a la lista de complementos.

Lista de complementos en Excel

Figura 2. Lista de complementos.

Al instalar el complemento veremos nuestra función dentro de la categoría llamada MiCategoria.

UDF y categoría pesonalizada en Excel

Figura 3. UDF y categoria personalizada.

Anexos

:: Descargar los archivos .xlsm y .xlam

Referencias

Funciones personalizadas

Complementos (add-ins)

You may also like...

3 Responses

  1. Raimon says:

    ¡Genial!
    Ya tengo mi primera función disponible siempre
    Me resulta de gran utilidad ¡Muchas gracias!
    Pero hago algo mal, no puedo incorporar el procedimiento descriptor de la función en el objeto Thisworkbook. Al contener una macro me da error. En concreto “error 1004 porque no se puede editar una macro de un libro de trabajo oculto.
    Por favor, ¿Qué hago mal?
    De nuevo gracias
    Raimon

    • Podrás compartir tu código para revisarlo ?

      • Raimon says:

        Hola
        Creo que es lo mismo que plantea el tutorial:
        Private Sub Workbook_Open()
        Call DescribeFunctionTrimestre
        End Sub

        Private Sub DescribeFunctionTrimestre()

        Dim NombreFunc As String ‘nombre de la función
        Dim DescFunc As String ‘descrición de la función
        Dim Categoria As String ‘categoría de la función
        Dim DescArg(1 To 3) As String ‘descripción de los argumentos

        NombreFunc = “Trimestre”
        DescFunc = “Retorna el número del trimestre que correspon a la data.”
        Categoria = “Rai_UDFs”
        DescArg(1) = “Data de la que es vol calcular el trimestre.”

        Application.MacroOptions _
        Macro:=NombreFunc, _
        Description:=DescFunc, _
        Category:=Categoria, _
        ArgumentDescriptions:=DescArg
        End Sub

        De nuevo, ¡Muchas gracias!
        Raimon

Leave a Reply

Your email address will not be published.

%d bloggers like this: