Resumen Imprimir un Recordset

Felipe, te veo algo apurado con la impresión de tu programa y probando muchas cosas. Me he entretenido en adaptar un poco a tu trabajo una Subrutina que yo tenía para imprimir Listas con Printer, que creo que es lo que tu quieres. Imprime una lista de todo el contenido actual del Recordset.
Aquí está:

'*******************************************************************************************************
Sub ImprimirLista()

   Dim AltLinea&, msCadTitulo$
   Dim msCadNombre$, msCadValor$, msCadCantidad$

   'Iniciar impresión
   Printer.Print ""

   'Calcular altura de línea
   AltLinea = Printer.TextHeight("A")

  'Imprimir Titulo
   Printer.Font.Name = "Arial"
   Printer.Font.Size = 16
   Printer.Font.Bold = True
   Printer.Font.Underline = True
   msCadTitulo = "LISTA DE PRODUCTOS"
   Printer.CurrentX = (11340 - Printer.TextWidth(msCadTitulo)) / 2 'Centra el tlitulo
   Printer.CurrentY = 400
   Printer.Print msCadTitulo

   'Imprimir Cabecera
   Printer.Font.Size = 10
   Printer.CurrentX = 1417
   Printer.CurrentY = Printer.CurrentY + (AltLinea * 2)
   Printer.Print "NOMBRE" & Chr$(9) & Chr$(9) & _
              "VALOR" & Chr$(9) & Chr$(9) & "CANTIDAD"

   'Imprimir Cuerpo
   Printer.Font.Underline = False
   Printer.Font.Bold = False
   Printer.CurrentY = Printer.CurrentY + AltLinea
   Data1.Recordset.MoveFirst
   Do While Data1.Recordset.EOF = False
       msCadNombre = Data1.Recordset("NombreProducto") & Chr$(9) & Chr$(9)
       msCadValor = Data1.Recordset("ValorProducto") & Chr$(9) & Chr$(9)
       msCadCantidad = Data1.Recordset("CantidadVendida")
       Printer.CurrentX = 1417
       Printer. Print msCadNombre & msCadValor & msCadCantidad
       Data1.Recordset.MoveNext
   Loop

   'Fin de impresión
   Printer.EndDoc

End Sub
'*******************************************************************************************************
La separación de los campos está hecha con tabuladores Chr$(9) porque ignoro el tamaño del texto. Puedes jugar con ellos o con los valores de Printer.CurrentX, sabiendo que para que Printer no salte de línea debes añadir punto y coma ( ; ) y despues el valor en twips del siguiente sitio a imprimir. Por ejemplo, en vez de ( Printer. Print msCadNombre & msCadValor & msCadCantidad) y quitando los tabuladores antes, puedes poner:

Printer.CurrentX = 1417
Printer. Print msCadNombre;
Printer.CurrentX = 5700
Printer. Print msCadValor;
Printer.CurrentX = 8000
Printer. Print msCadCantidad

El salto de página se realiza automaticamente por Printer. Si quieres que en cada página aparezca la cabecera, debes gestionar tu el salto y la nueva cabecera. Calculando el tamaño en Twips de la página, descontando el margen minímo de la impesora y dividiendo el resultado por la variable AltLinea, te da el número de líneas que puedes imprimir por página

Si lo que quieres es imprimir textos de más de una línea, repasa el mensaje que he enviado hace poco a la Lista a Pachin para imprimir memos. Y si quieres imprimir usando el RichTextBox (más facil para lo que tu quieres que usando el Word) repasa el mensaje enviado a GBastos.

Espero haberte ayudado. Saludos

Santiago Jimeno (Madrid)
SJIMENOH28@smail.ocefss.ucm.es



Resumen Resumen

Visual Basic Página de Visual Basic

Página principal Página principal

www.jrubi.com