Function convertir_a_letras(p_número As Currency) As String
    Dim t_decenas
    Dim t_cientos
    
    Dim v_número As String
    Dim v_entero As String
    Dim v_decimal As String
    Dim v_procesando As String
    
    Dim v_vueltas As Integer
    Dim v_parcial As String
    
    Dim v_i As Integer
    Dim v_borrar As Boolean
    
    ' Si el valor es cero, que nomás diga que es cero y se salga sin hacer nada.
    If p_número = 0 Then
        convertir_a_letras = "cero "
        Exit Function
    End If
    
    t_decenas = Array("", "un ", "dos ", "tres ", "cuatro ", "cinco ", "seis ", _
        "siete ", "ocho ", "nueve ", "diez ", "once ", "doce ", "trece ", "catorce ", _
        "quince ", "dieciséis ", "diecisiete ", "dieciocho ", "diecinueve ", _
        "veinte ", "veintiuno ", "veintidós ", "veintitrés ", "veinticuatro ", _
        "veinticinco ", "veintiséis ", "veintisiete ", "veintiocho ", "veintinueve ", _
        "treinta ", "treinta y uno ", "treinta y dos ", "treinta y tres ", "treinta y cuatro ", _
        "treinta y cinco ", "treinta y seis ", "treinta y siete ", "treinta y ocho ", _
        "treinta y nueve ", "cuarenta ", "cuarenta y un ", "cuarenta y dos ", "cuarenta y tres ", _
        "cuarenta y cuatro ", "cuarenta y cinco ", "cuarenta y seis ", "cuarenta y siete ", _
        "cuarenta y ocho ", "cuarenta y nueve ", "cincuenta ", "cincuenta y un ", _
        "cincuenta y dos ", "cincuenta y tres ", "cincuenta y cuatro ", "cincuenta y cinco ", _
        "cincuenta y seis ", "cincuenta y siete ", "cincuenta y ocho ", "cincuenta y nueve ", _
        "sesenta ", "sesenta y un ", "sesenta y dos ", "sesenta y tres ", "sesenta y cuatro ", _
        "sesenta y cinco ", "sesenta y seis ", "sesenta y siete ", "sesenta y ocho ", _
        "sesenta y nueve ", "setenta ", "setenta y un ", "setenta y dos ", "setenta y tres ", _
        "setenta y cuatro ", "setenta y cinco ", "setenta y seis ", "setenta y siete ", _
        "setenta y ocho ", "setenta y nueve ", "ochenta ", "ochenta y un ", "ochenta y dos ", _
        "ochenta y tres ", "ochenta y cuatro ", "ochenta y cinco ", "ochenta y seis ", _
        "ochenta y siete ", "ochenta y ocho ", "ochenta y nueve ", "noventa ", "noventa y un ", _
        "noventa y dos ", "noventa y tres ", "noventa y cuatro ", "noventa y cinco ", _
        "noventa y seis ", "noventa y siete ", "noventa y ocho ", "noventa y nueve ")
        
    t_cientos = Array("", "ciento ", "doscientos ", "trescientos ", "cuatrocientos ", _
        "quinientos ", "seiscientos ", "setecientos ", "ochocientos ", "novecientos ")
    
    v_número = Format(p_número, "000000000000000.00")
    v_entero = Left(v_número, Len(v_número) - 3)
    v_decimal = Right(v_número, 2)
    
    ' Procesar los decimales.
    
    v_vueltas = 0
    Do While Len(v_entero) > 0
        v_vueltas = v_vueltas + 1
        v_procesando = Right(v_entero, 3)
        v_entero = Left(v_entero, Len(v_entero) - 3)
        
        If (v_vueltas = 2 Or v_vueltas = 4) And Int(v_procesando) > 0 Then
            v_parcial = "mil " & v_parcial
        ElseIf v_vueltas = 3 And Int(Right(v_entero, 3) & v_procesando) > 0 Then
            If Int(Right(v_entero, 3) & v_procesando) = 1 Then
                v_parcial = "millón " & v_parcial
            Else
                v_parcial = "millones " & v_parcial
            End If
        ElseIf v_vueltas = 5 And Int(v_procesando) > 0 Then
            If Int(v_procesando) = 1 Then
                v_parcial = "billón " & v_parcial
            Else
                v_parcial = "billones " & v_parcial
            End If
        End If
        If v_procesando = "100" Then
            v_parcial = "cien " & v_parcial
        Else
            v_parcial = t_cientos(Int(Left(v_procesando, 1))) & t_decenas(Int(Right(v_procesando, 2))) & v_parcial
        End If
    Loop
    convertir_a_letras = v_parcial & "pesos " & v_decimal & "/100 M.N."
    
End Function