Attribute VB_Name = "NumeroaLetra"
Dim Numeros(103) As String
Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Function Centenas(VCentena As Double) As String
If VCentena = 1 Then
   Centenas = Numeros(100)
Else
   If VCentena = 5 Then
      Centenas = Numeros(101)
      Else
         If VCentena = 7 Then
            Centenas = letras & Numeros(102)
         Else
            If VCentena = 9 Then
               Centenas = letras & Numeros(103)
            Else
               Centenas = Numeros(VCentena)
            End If
         End If
   End If
End If
End Function
Function Unidades(VUnidad As Double) As String
   Unidades = Numeros(VUnidad)
End Function
Function Decenas(VDecena As Double) As String
   Decenas = Numeros(VDecena)
End Function
Sub inicializar()
   Numeros(0) = "cero"
   Numeros(1) = "un"
   Numeros(2) = "dos"
   Numeros(3) = "tres"
   Numeros(4) = "cuatro"
   Numeros(5) = "cinco"
   Numeros(6) = "seis"
   Numeros(7) = "siete"
   Numeros(8) = "ocho"
   Numeros(9) = "nueve"
   Numeros(10) = "diez"
   Numeros(11) = "once"
   Numeros(12) = "doce"
   Numeros(13) = "trece"
   Numeros(14) = "catorce"
   Numeros(15) = "quince"
   Numeros(20) = "veinte"
   Numeros(30) = "treinta"
   Numeros(40) = "cuarenta"
   Numeros(50) = "cincuenta"
   Numeros(60) = "sesenta"
   Numeros(70) = "setenta"
   Numeros(80) = "ochenta"
   Numeros(90) = "noventa"
   Numeros(100) = "ciento"
   Numeros(101) = "quinientos"
   Numeros(102) = "setecientos"
   Numeros(103) = "novecientos"
End Sub
Function NumerosALetras(Numero As Double, Valor1 As Boolean, Valor2 As Boolean) As String
Dim letras As String
Dim HuboCentavos As Boolean
Dim Decimales As Double

Decimales = Numero - Int(Numero)
Numero = Int(Numero)
inicializar

letras = ""
Do
   '*---> Validación si se pasa de 100 millones
   If Numero >= 1000000000 Then
      letras = "Error en Conversión a Letras"
      Numero = 0
      Decimales = 0
   End If
   
   '*---> Centenas de Millón
   If (Numero < 1000000000) And (Numero >= 100000000) Then
      If (Int(Numero / 100000000) = 1) And ((Numero - (Int(Numero / 100000000) * 100000000)) < 1000000) Then
         letras = letras & "cien millones "
      Else
         letras = letras & Centenas(Int(Numero / 100000000))
         If (Int(Numero / 100000000) <> 1) And (Int(Numero / 100000000) <> 5) And (Int(Numero / 100000000) <> 7) And (Int(Numero / 100000000) <> 9) Then
            letras = letras & "cientos "
         Else
            letras = letras & " "
         End If
      End If
      Numero = Numero - (Int(Numero / 100000000) * 100000000)
   End If
   
   '*---> Decenas de Millón
   If (Numero < 100000000) And (Numero >= 10000000) Then
      If Int(Numero / 1000000) < 16 Then
         letras = letras & Decenas(Int(Numero / 1000000))
         letras = letras & " millones "
         Numero = Numero - (Int(Numero / 1000000) * 1000000)
      Else
         letras = letras & Decenas(Int(Numero / 10000000) * 10)
         Numero = Numero - (Int(Numero / 10000000) * 10000000)
         If Numero > 1000000 Then
            letras = letras & " y "
         End If
      End If
   End If
   
   '*---> Unidades de Millón
   If (Numero < 10000000) And (Numero >= 1000000) Then
      If Int(Numero / 1000000) = 1 Then
         letras = letras & " un millón "
      Else
         letras = letras & Unidades(Int(Numero / 1000000))
         letras = letras & " millones "
      End If
      Numero = Numero - (Int(Numero / 1000000) * 1000000)
   End If
   
   '*---> Centenas de Millar
   If (Numero < 1000000) And (Numero >= 100000) Then
      If (Int(Numero / 100000) = 1) And ((Numero - (Int(Numero / 100000) * 100000)) < 1000) Then
         letras = letras & "cien mil "
      Else
         letras = letras & Centenas(Int(Numero / 100000))
         If (Int(Numero / 100000) <> 1) And (Int(Numero / 100000) <> 5) And (Int(Numero / 100000) <> 7) And (Int(Numero / 100000) <> 9) Then
            letras = letras & "cientos "
         Else
            letras = letras & " "
         End If
      End If
      Numero = Numero - (Int(Numero / 100000) * 100000)
   End If
   
   '*---> Decenas de Millar
   If (Numero < 100000) And (Numero >= 10000) Then
      If Int(Numero / 1000) < 16 Then
         letras = letras & Decenas(Int(Numero / 1000))
         letras = letras & " mil "
         Numero = Numero - (Int(Numero / 1000) * 1000)
      Else
         letras = letras & Decenas(Int(Numero / 10000) * 10)
         Numero = Numero - (Int((Numero / 10000)) * 10000)
         If Numero > 1000 Then
            letras = letras & " y "
         Else
            letras = letras & " mil "
         End If
      End If
   End If
   
   '*---> Unidades de Millar
   If (Numero < 10000) And (Numero >= 1000) Then
      If Int(Numero / 1000) = 1 Then
         letras = letras & "un"
      Else
         letras = letras & Unidades(Int(Numero / 1000))
      End If
      letras = letras & " mil "
      Numero = Numero - (Int(Numero / 1000) * 1000)
   End If
   
   '*---> Centenas
   If (Numero < 1000) And (Numero > 99) Then
      If (Int(Numero / 100) = 1) And ((Numero - (Int(Numero / 100) * 100)) < 1) Then
         letras = letras & "cien "
      Else
         letras = letras & Centenas(Int(Numero / 100))
         If (Int(Numero / 100) <> 1) And (Int(Numero / 100) <> 5) And (Int(Numero / 100) <> 7) And (Int(Numero / 100) <> 9) Then
            letras = letras & "cientos "
         Else
            letras = letras & " "
         End If
      End If
      Numero = Numero - (Int(Numero / 100) * 100)
      
   End If
   
    '*---> Decenas
   If (Numero < 100) And (Numero > 9) Then
      If Numero < 16 Then
         letras = letras & Decenas(Int(Numero))
         Numero = Numero - Int(Numero)
      Else
         letras = letras & Decenas(Int((Numero / 10)) * 10)
         Numero = Numero - (Int((Numero / 10)) * 10)
         If Numero > 0.99 Then
            letras = letras & " y "
         End If
      End If
End If
   
   '*---> Unidades
   If (Numero < 10) And (Numero > 0.99) Then
      letras = letras & Unidades(Int(Numero))
      Numero = Numero - Int(Numero)
   End If
Loop Until (Numero = 0)

'*---> Decimales
If (Decimales > 0) Then
    letras = letras & " Pesos con "
    letras = letras & Format(Decimales * 100, "00") & "/100"
ElseIf (Decimales = 0) Then
    letras = letras & " Pesos "
Else
    If (letras <> "Error en Conversión a Letras") And (Len(Trim(letras)) > 0) Then
    Select Case Valor1
    Case True
       letras = letras & " exactos"
    End Select
    End If
End If
NumerosALetras = letras
Select Case Valor2
Case True
NumerosALetras = UCase(Left(letras, 1)) & Right(letras, Len(letras) - 1)
End Select
End Function



