'variables locales que contienen valores de propiedad
Private astrConversor(0 To 2, 1 To 9) As String
Private mvarNumero As Variant ' copia local
Private mstrMoneda As String ' copia local
Public Property Let Numero(ByVal vData As Variant)
If IsNumeric(vData) Then
mvarNumero = vData
End If
End Property
Public Property Get Numero() As Variant
Numero = mvarNumero
End Property
Public Function ALetra() As String
' Var
Dim i As Integer
Dim intProceder As Integer
Dim intPosNumero As Integer
Dim intLongNumero As Integer
Dim strNumero As String
Dim strLetraNumero As String
' Establece los valores iniciales para las Variables
mvarNumero = Abs(mvarNumero) 'Deberá ser positivo
strNumero = CStr(Fix(mvarNumero)) 'A Cadena
intLongNumero = Len(strNumero)
intPosNumero = intLongNumero
' Cicle por el total de caracteres del número
For i = 1 To intLongNumero
intProceder = True
If (intPosNumero Mod 3) = 1 Then
If intLongNumero > intPosNumero Then
Select Case Mid(strNumero, i - 1, 2)
Case "00"
If UCase(Right(strLetraNumero, 7)) = "CIENTO " Then
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 7)
strLetraNumero = strLetraNumero & "Cien "
End If
Case "11"
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 5)
strLetraNumero = strLetraNumero & "Once "
intProceder = False
Case "12"
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 5)
strLetraNumero = strLetraNumero & "Doce "
intProceder = False
Case "13"
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 5)
strLetraNumero = strLetraNumero & "Trece "
intProceder = False
Case "14"
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 5)
strLetraNumero = strLetraNumero & "Catorce "
intProceder = False
Case "15"
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 5)
strLetraNumero = strLetraNumero & "Quince "
intProceder = False
Case "16", "17", "18", "19"
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 2)
strLetraNumero = strLetraNumero & "ci"
Case "21" To "29"
strLetraNumero = Left(strLetraNumero, Len(strLetraNumero) - 2)
strLetraNumero = strLetraNumero & "i"
Case Else
If Val(Mid(strNumero, i, 1)) > 0 And Val(Mid(strNumero, i - 1, 1)) > 0 Then
strLetraNumero = strLetraNumero & "y "
End If
End Select
End If
End If
If Val(Mid(strNumero, i, 1)) > 0 And intProceder Then
strLetraNumero = strLetraNumero & astrConversor((intPosNumero Mod 3), Val(Mid(strNumero, i, 1))) & " "
End If
Select Case intPosNumero
Case 4
If Right(strLetraNumero, 9) <> "millones " And Right(strLetraNumero, 13) <> "mil millones " And Right(strLetraNumero, 9) <> "billones " Then
strLetraNumero = strLetraNumero & "mil "
End If
Case 7
If Right(strLetraNumero, 13) <> "mil millones " And Right(strLetraNumero, 9) <> "billones " Then
strLetraNumero = strLetraNumero & "millones "
End If
Case 10
If Right(strLetraNumero, 9) <> "billones " Then
strLetraNumero = strLetraNumero & "millardos "
End If
Case 13
strLetraNumero = strLetraNumero & "billones "
Case Else
End Select
intPosNumero = intPosNumero - 1
Next i
strLetraNumero = Left(strLetraNumero, 1) & LCase(Mid(strLetraNumero, 2))
If Numero <> Fix(Numero) Then
i = (Numero - Fix(Numero)) * 100
strLetraNumero = strLetraNumero & LCase(mstrMoneda) & Str(i) & "/100"
Else
strLetraNumero = strLetraNumero & LCase(mstrMoneda) & " 00/100"
End If
If UCase(mstrMoneda) = "PESOS" Then
strLetraNumero = strLetraNumero & " M. N."
End If
ALetra = strLetraNumero
End Function
Private Sub Asigna()
' Asigna los Valores al arreglo astrConversor
astrConversor(0, 1) = "Ciento"
astrConversor(0, 2) = "Doscientos"
astrConversor(0, 3) = "Trescientos"
astrConversor(0, 4) = "Cuatrocientos"
astrConversor(0, 5) = "Quinientos"
astrConversor(0, 6) = "Seiscientos"
astrConversor(0, 7) = "Setecientos"
astrConversor(0, 8) = "Ochocientos"
astrConversor(0, 9) = "Novecientos"
astrConversor(1, 1) = "Un"
astrConversor(1, 2) = "Dos"
astrConversor(1, 3) = "Tres"
astrConversor(1, 4) = "Cuatro"
astrConversor(1, 5) = "Cinco"
astrConversor(1, 6) = "Seis"
astrConversor(1, 7) = "Siete"
astrConversor(1, 8) = "Ocho"
astrConversor(1, 9) = "Nueve"
astrConversor(2, 1) = "Diez"
astrConversor(2, 2) = "Veinte"
astrConversor(2, 3) = "Treinta"
astrConversor(2, 4) = "Cuarenta"
astrConversor(2, 5) = "Cincuenta"
astrConversor(2, 6) = "Sesenta"
astrConversor(2, 7) = "Setenta"
astrConversor(2, 8) = "Ochenta"
astrConversor(2, 9) = "Noventa"
End Sub
Public Property Get Moneda() As String
Moneda = mstrMoneda
End Property
Public Property Let Moneda(ByVal vNewValue As String)
mstrMoneda = vNewValue
End Property
Private Sub Class_Initialize()
Asigna
mstrMoneda = "pesos"
End Sub
Private Sub Class_Terminate()
Erase astrConversor
End Sub