Hola a todos, estaba programando un código que transforme en palabras cantidades de dinero en EXCEL. El problema se da cunado trata de transformar números entre el 32767 al 99999 o que contengan estos valores. Si tu colocas por ejemplo 600000 la función va de maravilla, pero si colocas 699999 devuelve el error de Valor. Alguien sabe como solucionarlo?
ADJUNTO EL CODIGO
Function NumeroATexto(ByVal Numero As Double) As String
Dim Unidades As Variant, Decenas As Variant
Dim Texto As String
Dim ParteEntera As Double, ParteDecimal As Double, ParteEntera2 As Double
Dim Centenas As String, Resto As Integer, restoMiles As Integer, DecMiles As String, CieMiles As String
Unidades = Array("", "UNO", "DOS", "TRES", "CUATRO", "CINCO", "SEIS", "SIETE", "OCHO", "NUEVE")
Decenas = Array("", "DIEZ", "VEINTE", "TREINTA", "CUARENTA", "CINCUENTA", "SESENTA", "SETENTA", "OCHENTA", "NOVENTA")
ParteEntera = Int(Numero)
ParteDecimal = Round((Numero - ParteEntera) * 100, 0) ' Redondea los centavos
' Si el número es 0
If Numero = 0 Then
NumeroATexto = "CERO DÓLARES CON CERO CENTAVOS"
Exit Function
End If
' Manejo de centenas de miles
If ParteEntera >= 100000 Then
Resto = ParteEntera Mod 100000
Select Case Int(ParteEntera / 100000)
Case 1: CieMiles = IIf(Int(ParteEntera / 100000) = 1, "CIEN", "CIENTO")
Case 2: CieMiles = "DOSCIENTOS"
Case 3: CieMiles = "TRESCIENTOS"
Case 4: CieMiles = "CUATROCIENTOS"
Case 5: CieMiles = "QUINIENTOS"
Case 6: CieMiles = "SEISCIENTOS"
Case 7: CieMiles = "SETECIENTOS"
Case 8: CieMiles = "OCHOCIENTOS"
Case 9: CieMiles = "NOVECIENTOS"
End Select
Else
Resto = ParteEntera
CieMiles = ""
End If
' Manejo de decenas y unidades de miles
If Resto < 10000 Then
restoMiles = Int(Resto / 1000)
If restoMiles = 1 Then
DecMiles = ""
Else
DecMiles = Unidades(restoMiles)
End If
ElseIf Resto < 20000 Then
restoMiles = Int(Resto / 1000)
Select Case restoMiles
Case 10: DecMiles = "DIEZ"
Case 11: DecMiles = "ONCE"
Case 12: DecMiles = "DOCE"
Case 13: DecMiles = "TRECE"
Case 14: DecMiles = "CATORCE"
Case 15: DecMiles = "QUINCE"
Case 16 To 19: DecMiles = "DIECI" & Unidades(restoMiles - 10)
End Select
Else
restoMiles = Int(Resto / 1000)
DecMiles = Decenas(Int(restoMiles / 10))
If (restoMiles Mod 10) <> 0 Then DecMiles = DecMiles & " Y " & Unidades(restoMiles Mod 10)
End If
ParteEntera2 = ParteEntera Mod 1000
' Manejo de centenas
If ParteEntera2 >= 100 Then
Resto = ParteEntera2 Mod 100
Select Case Int(ParteEntera2 / 100)
Case 1: Centenas = IIf(Resto = 0, "CIEN", "CIENTO")
Case 2: Centenas = "DOSCIENTOS"
Case 3: Centenas = "TRESCIENTOS"
Case 4: Centenas = "CUATROCIENTOS"
Case 5: Centenas = "QUINIENTOS"
Case 6: Centenas = "SEISCIENTOS"
Case 7: Centenas = "SETECIENTOS"
Case 8: Centenas = "OCHOCIENTOS"
Case 9: Centenas = "NOVECIENTOS"
End Select
Else
Resto = ParteEntera2
Centenas = ""
End If
' Manejo de decenas y unidades
If Resto < 10 Then
Texto = Unidades(Resto)
ElseIf Resto < 20 Then
Select Case Resto
Case 10: Texto = "DIEZ"
Case 11: Texto = "ONCE"
Case 12: Texto = "DOCE"
Case 13: Texto = "TRECE"
Case 14: Texto = "CATORCE"
Case 15: Texto = "QUINCE"
Case 16 To 19: Texto = "DIECI" & Unidades(Resto - 10)
End Select
Else
Texto = Decenas(Int(Resto / 10))
If (Resto Mod 10) <> 0 Then Texto = Texto & " Y " & Unidades(Resto Mod 10)
End If
' Concatenar parte entera en dólares
If ParteEntera > 1000 Then
NumeroADolares = Trim(CieMiles & " " & DecMiles & " " & "MIL" & " " & Centenas & " " & Texto)
Else
NumeroADolares = Trim(Centenas & " " & Texto)
End If
If ParteEntera = 1 Then
NumeroADolares = NumeroADolares & " DÓLAR"
Else
NumeroADolares = NumeroADolares & " DÓLARES"
End If
' Convertir los centavos a texto
If ParteDecimal > 0 Then
Resto = ParteDecimal
If Resto < 10 Then
TextoCentavos = Unidades(Resto)
ElseIf Resto < 20 Then
Select Case Resto
Case 10: TextoCentavos = "DIEZ"
Case 11: TextoCentavos = "ONCE"
Case 12: TextoCentavos = "DOCE"
Case 13: TextoCentavos = "TRECE"
Case 14: TextoCentavos = "CATORCE"
Case 15: TextoCentavos = "QUINCE"
Case 16 To 19: TextoCentavos = "DIECI" & Unidades(Resto - 10)
End Select
Else
TextoCentavos = Decenas(Int(Resto / 10))
If (Resto Mod 10) <> 0 Then TextoCentavos = TextoCentavos & " y " & Unidades(Resto Mod 10)
End If
NumeroATexto = NumeroADolares & " CON " & TextoCentavos & " CENTAVO/OS"
Else
NumeroATexto = NumeroADolares & " CON CERO CENTAVOS"
End If
End Function