Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Trasformar numeros en textos

Estas en el tema de Trasformar numeros en textos en el foro de Visual Basic clásico en Foros del Web. Hola tengo una planilla de excel que he estado programando en VB para hacer mi trabajo, lo que necesito es poder imprimir el resultado numerico ...
  #1 (permalink)  
Antiguo 29/06/2005, 17:11
 
Fecha de Ingreso: mayo-2002
Mensajes: 84
Antigüedad: 22 años
Puntos: 0
Trasformar numeros en textos

Hola tengo una planilla de excel que he estado programando en VB para hacer mi trabajo, lo que necesito es poder imprimir el resultado numerico y que el sistema me lo pueda leer y escribir como texto (ej. 20.000 lo trasforme a texto = veinte mil) , lo necesito para imprimir documentos bancarios que llevan el valor y tambien este escrito como texto.

Quien sabe como lo puedo hacer????
Existen dll para esto o programas hechos? o se puede programar en VB directamente.

Agradesco la ayuda.
  #2 (permalink)  
Antiguo 30/06/2005, 12:08
Avatar de pablinweb  
Fecha de Ingreso: julio-2003
Mensajes: 283
Antigüedad: 20 años, 9 meses
Puntos: 0
se puede programar directamente en vb, la verdad que no sé si hay alguna dll dando vueltas que te facilite las cosas, yo te paso un modulo que armé y anda bastante bien, lo unico es que lo uso con vb studio, no sé como lo podes poner en el de excel porque no programé mucho de esa forma pero espero te sirva.

Código:
Function ImporteEnLetras(pImporte As String, pSepDecimal As String, pCharPorLinea As Integer, pDesMoneda As String, pDesCentavos As String, pDecimalesEnNumeros As Boolean) As String

Dim tmpEntero(9) As String
Dim tmpDecimal(2) As String
Dim tmpImporteEnLetras As String
Dim tmpLetrasFinal As String
Dim tmpEsDecimal As Boolean
Dim tmpImporte As String
Dim tmpEnteros As String
Dim tmpDecimales As String
Dim tmpChar As String * 1
Dim i As Integer
Dim tmpLargoImporte As Integer
Dim tmpLargoEnteros As Integer
Dim tmpPosicion As Integer
Dim tmpDigito As Integer
Dim tmpCantChar As Integer
Dim tmpPalabra As String

ImporteEnLetras = ""

tmpImporteEnLetras = ""
tmpLetrasFinal = ""
tmpImporte = Trim(pImporte)
tmpEsDecimal = False
tmpEnteros = ""
tmpDecimales = ""

For i = 1 To Len(tmpImporte)
  tmpChar = Mid(tmpImporte, i, 1)
  If tmpChar <> pSepDecimal And (Asc(tmpChar) < 48 Or Asc(tmpChar) > 57) Then
    Exit Function
  End If
Next i

For i = 1 To 9
  tmpEntero(i) = "0"
Next i

tmpLargoImporte = Len(tmpImporte)

For tmpPosicion = 1 To tmpLargoImporte
  tmpChar = Mid(tmpImporte, tmpPosicion, 1)
  If tmpChar = pSepDecimal Then
    tmpEsDecimal = True
  Else
    If tmpEsDecimal = True Then
      tmpDecimales = tmpDecimales + tmpChar
    Else
      tmpEnteros = tmpEnteros + tmpChar
    End If
  End If
Next tmpPosicion

tmpDecimales = Left(tmpDecimales + "00", 2)
tmpLargoEnteros = Len(tmpEnteros)

For tmpDigito = tmpLargoEnteros To 1 Step -1
  tmpEntero(tmpDigito) = Mid(tmpEnteros, (tmpLargoEnteros - tmpDigito + 1), 1)
Next tmpDigito

If (tmpEntero(9) <> "0" Or tmpEntero(8) <> "0" Or tmpEntero(7) <> "0") Then
  tmpImporteEnLetras = tmpImporteEnLetras + ConvierteLetras(tmpEntero(9), tmpEntero(8), tmpEntero(7))
  If (tmpEntero(9) = "0" And tmpEntero(8) = "0" And tmpEntero(7) = "1") Then
    tmpImporteEnLetras = tmpImporteEnLetras + "millon "
  Else
    tmpImporteEnLetras = tmpImporteEnLetras + "millones "
  End If
End If

If (tmpEntero(6) <> "0" Or tmpEntero(5) <> "0" Or tmpEntero(4) <> "0") Then
  If (tmpEntero(6) = "0" And tmpEntero(5) = "0" And tmpEntero(4) = "1") Then
  Else
    tmpImporteEnLetras = tmpImporteEnLetras + ConvierteLetras(tmpEntero(6), tmpEntero(5), tmpEntero(4))
  End If
  tmpImporteEnLetras = tmpImporteEnLetras + "mil "
End If

tmpImporteEnLetras = tmpImporteEnLetras + ConvierteLetras(tmpEntero(3), tmpEntero(2), tmpEntero(1))
If tmpEntero(1) = "1" Then tmpImporteEnLetras = Left(tmpImporteEnLetras, Len(tmpImporteEnLetras) - 1) + "o "

'If Decimales<>"00" Then
  If tmpImporteEnLetras = "" Then tmpImporteEnLetras = "cero "
  If pDecimalesEnNumeros = True Then
    tmpImporteEnLetras = tmpImporteEnLetras + pDesMoneda + " con " + tmpDecimales + "/100 " + pDesCentavos
  Else
    tmpDecimal(1) = Mid(tmpDecimales, 1, 1)
    tmpDecimal(2) = Mid(tmpDecimales, 2, 1)
    tmpImporteEnLetras = tmpImporteEnLetras + pDesMoneda + " con " + ConvierteLetras("0", tmpDecimal(1), tmpDecimal(2)) + pDesCentavos
  End If
'End If

tmpImporteEnLetras = RTrim(tmpImporteEnLetras)

If Len(tmpImporteEnLetras) <= pCharPorLinea Then
  tmpLetrasFinal = tmpImporteEnLetras
Else
  tmpCantChar = 0
  tmpPalabra = ""
  For i = 1 To Len(tmpImporteEnLetras)
    tmpCantChar = tmpCantChar + 1
    tmpChar = Mid(tmpImporteEnLetras, i, 1)
    If tmpChar = " " Then
      tmpLetrasFinal = tmpLetrasFinal + tmpPalabra
      tmpPalabra = ""
      If tmpCantChar < pCharPorLinea Then tmpLetrasFinal = tmpLetrasFinal + tmpChar
    Else
      tmpPalabra = tmpPalabra + tmpChar
    End If
    If tmpCantChar > pCharPorLinea Then
      tmpCantChar = Len(tmpPalabra)
      tmpLetrasFinal = tmpLetrasFinal + Chr(10)
    End If
  Next i
  tmpLetrasFinal = tmpLetrasFinal + tmpPalabra
End If

ImporteEnLetras = UCase(tmpLetrasFinal)

End Function
Function ConvierteLetras(pDigito3 As String, pDigito2 As String, pDigito1 As String) As String

Dim tmpLetras As String

ConvierteLetras = ""
tmpLetras = ""

Select Case pDigito3
  Case "0"
  Case "1"
    If pDigito2 = "0" And pDigito1 = "0" Then
      tmpLetras = tmpLetras + "cien "
    Else
      tmpLetras = tmpLetras + "ciento "
    End If
  Case "2"
    tmpLetras = tmpLetras + "doscientos "
  Case "3"
    tmpLetras = tmpLetras + "trescientos "
  Case "4"
    tmpLetras = tmpLetras + "cuatrocientos "
  Case "5"
    tmpLetras = tmpLetras + "quinientos "
  Case "6"
    tmpLetras = tmpLetras + "seiscientos "
  Case "7"
    tmpLetras = tmpLetras + "setecientos "
  Case "8"
    tmpLetras = tmpLetras + "ochocientos "
  Case "9"
    tmpLetras = tmpLetras + "novecientos "
  Case Else
    Exit Function
End Select

Select Case pDigito2
  Case "0"
  Case "1"
    Select Case pDigito1
      Case "0"
        tmpLetras = tmpLetras + "diez "
      Case "1"
        tmpLetras = tmpLetras + "once "
      Case "2"
        tmpLetras = tmpLetras + "doce "
      Case "3"
        tmpLetras = tmpLetras + "trece "
      Case "4"
        tmpLetras = tmpLetras + "catorce "
      Case "5"
        tmpLetras = tmpLetras + "quince "
      Case "6"
        tmpLetras = tmpLetras + "dieciseis "
      Case "7"
        tmpLetras = tmpLetras + "diecisiete "
      Case "8"
        tmpLetras = tmpLetras + "dieciocho "
      Case "9"
        tmpLetras = tmpLetras + "diecinueve "
      Case Else
        Exit Function
    End Select
  Case "2"
    If pDigito1 = "0" Then
      tmpLetras = tmpLetras + "veinte "
    Else
      tmpLetras = tmpLetras + "veinti"
    End If
  Case "3"
    tmpLetras = tmpLetras + "treinta "
  Case "4"
    tmpLetras = tmpLetras + "cuarenta "
  Case "5"
    tmpLetras = tmpLetras + "cincuenta "
  Case "6"
    tmpLetras = tmpLetras + "sesenta "
  Case "7"
    tmpLetras = tmpLetras + "setenta "
  Case "8"
    tmpLetras = tmpLetras + "ochenta "
  Case "9"
    tmpLetras = tmpLetras + "noventa "
  Case Else
    Exit Function
End Select
If Val(pDigito2) >= 3 And pDigito1 <> "0" Then tmpLetras = tmpLetras + "y "

If pDigito2 <> "1" Then
  Select Case pDigito1
    Case "0"
    Case "1"
      tmpLetras = tmpLetras + "un "
    Case "2"
      tmpLetras = tmpLetras + "dos "
    Case "3"
      tmpLetras = tmpLetras + "tres "
    Case "4"
      tmpLetras = tmpLetras + "cuatro "
    Case "5"
      tmpLetras = tmpLetras + "cinco "
    Case "6"
      tmpLetras = tmpLetras + "seis "
    Case "7"
      tmpLetras = tmpLetras + "siete "
    Case "8"
      tmpLetras = tmpLetras + "ocho "
    Case "9"
      tmpLetras = tmpLetras + "nueve "
    Case Else
      Exit Function
  End Select
End If

ConvierteLetras = tmpLetras

End Function
y se usa así:

text1.text = ImporteEnLetras(dblValor, ".", "100", "PESOS", "CENTAVOS", True)

dblValor = Valor númerico pero guardado en una varieble de tipo String que va a ser convertido a letras
"."= Caracter de separación decimal
"100"= Cantidad de Carcteres por linea del resultado
"PESOS"= Nombre de la moneda
"CENTAVOS"= Descripción que se le dá al resultado decimal
True= Si se le pasa true los decimales los representa en números, si se le pasa false los decimales son tamien comvertidos a letras
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:33.