Como crear complementos para Excel (add ins)

Si eres un fanático de Excel como yo, quizá ya hayas visto e incluso instalado algunos complementos para Excel, existen muchos realmente útiles, algunos son pagados y otros son gratis.

Pero el propósito de este artículo es iniciarte en el mundo de la creación de complementos para Excel. Si esto de los complementos es nuevo para ti, te recomiendo que primero leas este otro artículo que habla un poco de como se instalan. 

Crear un complemento puede ser fácil o difícil, todo depende de lo que desees programar, pero para este ejercicio vamos a crear un complemento que convierta números a letras y al finalizar tendremos siempre disponible en nuestro Excel una función que nos permita convertir cualquier número a letras.

Primero debemos crear un nuevo documento de Excel, luego presionamos Ctrl+F11 para entrar al editor de VBA, luego insertamos un Modulo.

Insertar un modulo de codigo en VBA

Ahora en la parte izquierda copiamos y pegamos el siguiente código:

Function NumLetras(Valor As Currency, Optional MonedaSingular As String = "", Optional MonedaPlural As String = "") As String
Dim lyCantidad As Currency, lyCentavos As Currency, lnDigito As Byte, lnPrimerDigito As Byte, lnSegundoDigito As Byte, lnTercerDigito As Byte, lcBloque As String, lnNumeroBloques As Byte, lnBloqueCero
Dim laUnidades As Variant, laDecenas As Variant, laCentenas As Variant, I As Variant 'Si esta como Option Explicit
Dim ValorEntero As Long
    Valor = Round(Valor, 2)
    lyCantidad = Int(Valor)
    ValorEntero = lyCantidad
    lyCentavos = (Valor - lyCantidad) * 100
    laUnidades = Array("UN", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE", "DIEZ", "ONCE", "DOCE", "TRECE", "CATORCE", "QUINCE", "DIECISEIS", "DIECISIETE", "DIECIOCHO", "DIECINUEVE", "VEINTE", "VEINTIUN", "VEINTIDOS", "VEINTITRES", "VEINTICUATRO", "VEINTICINCO", "VEINTISEIS", "VEINTISIETE", "VEINTIOCHO", "VEINTINUEVE")
    laDecenas = Array("DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
    laCentenas = Array("CIENTO", "DOSCIENTOS", "TRESCIENTOS", "CUATROCIENTOS", "QUINIENTOS", "SEISCIENTOS", "SETECIENTOS", "OCHOCIENTOS", "NOVECIENTOS")
    lnNumeroBloques = 1
    Do
        lnPrimerDigito = 0
        lnSegundoDigito = 0
        lnTercerDigito = 0
        lcBloque = ""
        lnBloqueCero = 0
        For I = 1 To 3
            lnDigito = lyCantidad Mod 10
            If lnDigito <> 0 Then
                Select Case I
                Case 1
                    lcBloque = " " & laUnidades(lnDigito - 1)
                    lnPrimerDigito = lnDigito
                Case 2
                    If lnDigito <= 2 Then
                        lcBloque = " " & laUnidades((lnDigito * 10) + lnPrimerDigito - 1)
                    Else
                    lcBloque = " " & laDecenas(lnDigito - 1) & IIf(lnPrimerDigito <> 0, " Y", Null) & lcBloque
                    End If
                    lnSegundoDigito = lnDigito
                Case 3
                    lcBloque = " " & IIf(lnDigito = 1 And lnPrimerDigito = 0 And lnSegundoDigito = 0, "CIEN", laCentenas(lnDigito - 1)) & lcBloque
                    lnTercerDigito = lnDigito
                End Select
            Else
                lnBloqueCero = lnBloqueCero + 1
            End If
            lyCantidad = Int(lyCantidad / 10)
            If lyCantidad = 0 Then
                Exit For
            End If
        Next I
        Select Case lnNumeroBloques
            Case 1
                NumLetras = lcBloque
            Case 2
                NumLetras = lcBloque & IIf(lnBloqueCero = 3, Null, " MIL") & NumLetras
            Case 3
                NumLetras = lcBloque & IIf(lnPrimerDigito = 1 And lnSegundoDigito = 0 And lnTercerDigito = 0, " MILLON", " MILLONES") & NumLetras
        End Select
        lnNumeroBloques = lnNumeroBloques + 1
    Loop Until lyCantidad = 0
    NumLetras = NumLetras & " " & Format(Str(lyCentavos), "00") & "/100 " & IIf(ValorEntero = 1, MonedaSingular, MonedaPlural)
End Function

Ya casi hemos terminado, ahora cerramos esta ventana de VBA y guardamos el archivo de Excel que creamos como “Complemento de Excel” de extensión xla para Excel 2003 y xlam para Excel 2007 o superior. Por cierto, el formato xla del Excel 2003 también es compatible con las versiones posteriores (Excel 2007 en adelante)

Guardar archivo para convertirlo en complemento de Excel

Ahora ya tienes tu primer complemento de Excel, para usarlo antes debes instalarlo.

Este complemento agrega una función más a tu Excel llamada NumLetras, para utilizarla solo inserta en una celda la función con los parámetros que solicita.

Conclusiones

Para crear un complemento básicamente creamos una o más macros, luego guardamos el archivo de Excel como Complemento y de esta forma podemos reutilizar dichas macros en cada archivo de Excel que usemos.

3 comentarios en «Como crear complementos para Excel (add ins)»

  1. Hola, yo tengo la version 2010 en excel, guardo el archivo con la extensión que mencionan, y cuando después de elegir el complemento le doy aceptar y me dice que no es valido.

    Si pueden ayuda se los agradecería.

    Responder
  2. Muy util la informacion, es mas, descargue los complementos para Excel 2007 y 2010 ya que necesitaba en un documento que automatice que pusiera cantidades en letrs, de manera natural, Excel no trae esta funcion per gracias a ustedes pude resolver el problema, ahora mi jefa esta contenta que podamos imprimir documentos que se ingresa el numero y lo convierte a letra.– Muchas gracias por toda esa util informacin que han facilitado por la internet.

    Responder

Deja un comentario