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