Hola,te paso un modulo clase que use en un conversor de unidades de medidas..
Código:
Option Explicit
Private astrConversor(0 To 2, 1 To 9) As String
Private mvarNumero As Variant
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
Dim i As Integer
Dim intProceder As Integer
Dim intPosNumero As Integer
Dim intLongNumero As Integer
Dim strNumero As String
Dim strLetraNumero As String
mvarNumero = Abs(mvarNumero)
strNumero = CStr(Fix(mvarNumero))
intLongNumero = Len(strNumero)
intPosNumero = intLongNumero
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 & "mil "
End If
Case 13
strLetraNumero = strLetraNumero & "billones "
Case Else
End Select
intPosNumero = intPosNumero - 1
Next i
strLetraNumero = Left(strLetraNumero, 1) & LCase(Mid(strLetraNumero, 2))
ALetra = strLetraNumero
End Function
Private Sub Asigna()
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) = "Uno"
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
Private Sub Class_Initialize()
Asigna
End Sub
Private Sub Class_Terminate()
Erase astrConversor
End Sub en un formulario con 2 textbox escribi esto:
Código:
Private Conversor As New Class1
Private Sub Text1_Change()
Conversor.Numero = Val(Text1.Text)
Text2.Text = Conversor.ALetra
End Sub
aguanta hasta
999999999999999 o sea,
"Novecientos noventa y nueve billones novecientos noventa y nueve mil novecientos noventa y nueve millones novecientos noventa y nueve mil novecientos noventa y nueve "
saludos.