Printer.print

Necesito saber como puedo imprimir una cifra en palabras de un sistema de facturación, cuando la frase sea muy larga, pasar a la siguiente linea sin que la frase sea cortada en cualquier parte.
Por ej: nueve millones novecientos noventa
Y nueve mil novecientos noventa.
¿Cómo logro esto?.

3 Respuestas

Respuesta
1
Hay dos maneras, midiendo el largo de la cadena en caracteres o en la unidad que tenga asignada actualmente, en este caso, el objeto Printer, para el primer caso, el más sencillo, podrías usar algo así...
Private Sub ImprimirCadena()
Dim Largo As Single
Dim Numero As Single
Dim PosEsp As Integer
Dim strCadena As String
'Obtengo un número aleatorio, asui solo sustituyes por la variable donde tengas tu cadena
Randomize
Numero = Rnd() * 100000000
'Obtengo el valor en letras, esto se supone ya lo tienes
strCadena = NumLetras(Numero, True)
'Mido la longuitud de la cadena
Largo = Len(strCadena)
'Si es mayor a un número que yo considere no pase del ancho deseado, esto puede ser variable si usas una fuente TrueType, si usas una de ancho fijo funciona muy bien
If Largo > 50 Then
'Si es mayor al limite, buscamos el espacio más proximo a este
PosEsp = InStr(40, strCadena, " ")
'Y separamos la cadena en dos, agregandole el salto de linea
strCadena = Mid(strCadena, 1, PosEsp - 1) & vbCrLf & _
Mid(strCadena, PosEsp + 1, Largo - PosEsp)
End If
'Imprimo la cadena en el depurador, por supuesto, tu la mandas a la impresora
Debug.Print strCadena
End Sub
'Para el segundo caso, tienes el metodo TextWidth que te da el ancho de la cadena pasada, solo que te la da en la unidad que tengas actual en el objeto Printer, normalemente Pixeles, pero la logica es casi la misma, así que te la dejo de tarea
Largo = Printer.TextWidth(strCadena)
Respuesta
1
Enviame tu email para poder mandarte la rutina de números a letras.
Para recortar correctamente una cadena puedes usar lo siguiente:
? Left(x, rat(chr(32), left(x, 60)))
mi correo es [email protected]
Y gracias,
¿Tienes algo sobre códigos de barra?
Te contesté a tu email
Respuesta
Lo que necesitas es enviar un salto de linea dentro de la cadena que estas imprimiendo por ejemplo:
Tu necesitas enviar el salto de linea en la posición 40 entonces
Mid(cadena,1,40) & chr(13) & chr(10) & mid(cadena,41,len(cadena))
Donde cadena es el texto a imprimir, de esta, manera imprimes un salto de linea.
Esta bien lo que me dijiste, perotengo un pequeño detalle.
La frase hace el salto de linea, cortando la palabra en el carácter 40 quedando la frase cortada.
Ej: quiniento ochenta y nueve millones nove
cientos noventa y nueve mil novecientos cuarenta
Lo ue necesito es que me haga el salto de linea, pero sin cortar una palabra, creo que debería buscar un espacio en blanco en la frase y en ese momento hacer el salto.
¿Cómo puedo hacer eso?
Supongo que tienes una función en el cual le des un numero y te devuelva las palabras, es ahí donde debemos insertar el salto de linea antes o después de la palbara en la cual va a ir el salto de linea.
Ejemplo:
Nueve millones novecientos noventa
Y nueve mil novecientos noventa.
Entonces el salto de linea ira siempre antes de la palabra "Y"

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas