elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


Tema destacado: Usando Git para manipular el directorio de trabajo, el índice y commits (segunda parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  Ayuda, error en codigo VBA
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Ayuda, error en codigo VBA  (Leído 125 veces)
srString

Desconectado Desconectado

Mensajes: 1


Ver Perfil
Ayuda, error en codigo VBA
« en: Hoy a las 05:41 »

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


En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.533


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: Ayuda, error en codigo VBA
« Respuesta #1 en: Hoy a las 12:34 »

Hola!

La primer busqueda en Google me devuelve:

Citar
The VBA Int data type is used to store whole numbers (no decimal values). However as we’ll see below, the Integer values must fall within the range ‑32768 to 32768.

Fuente: https://www.automateexcel.com/vba/integer-data-type/

Por ello en tu codigo:

Código:
ParteEntera = Int(Numero)

Debe ser la conversión que falla en el rango que has colocado.

Saludos!


En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
error en codigo ayuda
Programación Visual Basic
eszzes 4 2,100 Último mensaje 16 Julio 2008, 02:08 am
por eszzes
[AYUDA] Error con codigo
Programación C/C++
VintageChanel 2 2,186 Último mensaje 30 Enero 2015, 03:45 am
por vangodp
Error en codigo Ayuda!!!
Programación C/C++
arkangel2006 2 2,294 Último mensaje 10 Marzo 2015, 04:02 am
por rir3760
Ayuda error en codigo
Programación C/C++
enzopaez14 2 1,987 Último mensaje 5 Septiembre 2016, 02:41 am
por deadpool-x
Error en el código!! Ayuda
Java
Compila 0 2,331 Último mensaje 4 Julio 2022, 11:41 am
por Compila
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines