¿Cómo puedo imprimir en pdf una selección múltiple de registros?

Tengo un formulario de contratos de alquileres "Alquileres" basado en una tabla "1alquileres" con un botón "contrato" en el encabezado del formulario que abre un informe con el formato de contrato para que lo firme el cliente.

He creado otro formulario con un resumen de cada contrato en filas, basado en una consulta de la tabla "1alquileres", y al final he añadido un campo "impresión" de tipo si/No. Quisiera saber que código debería de poner en un botón "impresión", puesto en el encabezado del formulario, para que imprima en pdf cada contrato seleccionado con las casillas si/no. (1 pdf por contrato con el nombre del Id_alquileres).

No se si ha quedado muy claro. ¿Se podría hacer?

1 respuesta

Respuesta
1

Es muy sencillo:

1º/ abres un recordset sobre tu tabla/consulta y empiezas a recorrerlo

2º/ miras en el registro que el campo esté marcado (true)

3º/ si lo está, abres el informe filtrado por el id del ese registro y lo exportas a pdf

4º/ pasas al siguiente registro

Te adjunto un ejemplo reutilizando los datos del ejemplo de enviar correos (uso el campo mailing para marcar los que voy a imprimir a pdf): http://www.filebig.net/files/j2LSCmgYhy

Solo debes adaptar el código a lo que tu tengas/quieras (nombres de campos, consulta, informe..., ruta de destino...)

Un saludo.


Buenas tardes Sveinbjorn,

Llevo varios días intentando adaptar los códigos que me distes para el envio de emails para imprimir informes seleccionando los registros que quiera pero no me sale. El texto es un poco largo pero he intentado ser lo más detallado posible.

Se trata de contratos de alquileres. El formulario en formato "tabulación" me da una información resumida de los diferentes contratos.

A la tabla "Alquileres" que recoge la información he añadido el campo "Check_imp_temporal" de tipo si/no.

Al formulario "Alquiler_imprimir_contratos" le he añadido dicho campo así como 3 botones:

- Botón "Comando30". en cada linea de registros para poder imprimir el informe correspondiente de manera puntual y rápido. Esto lo he realizado con macros. El problema que encontré es que el informe que quiero imprimir "contrato_de_alquiler_temporal" llevan la información del formulario "alquileres" por lo que no podía abrir directamente el informe sin abrir primero el formulario "Alquiler" que recoge toda la información. Por lo tanto la macro abre primero el formulario "Alquiler" vinculado la Id_alquiler del formulario alquileres a la Id_alquiler del formulario "Alquiler_imprimir_contratos" y lo mismo con el informe "contrato_de_alquiler_temporal". Este comando funciona

- Botón "Comando29" que permite marcar todos los campos si/no o desmarcarlos. Este tambien funciona perfectamente.

- Botón "Comando37", este es el que no consigo hacer funcionar y es el que debería de imprimir los informes "contrato_de_alquiler_temporal" que estén seleccionados por el campo de verificación "Check_imp_temporal"

-------------------------------------------------------------------------------------------------------

En realida, para rizar aún más el rizo, lo que quiero conseguir al final son 4 columnas de verificación en el mismo formulario puesto que hay 3 tipos de informes: Contratos, inventario de los apartaments y protección de datos.  Para estas 3 casillas de verificación es conseguido lo mismo: que funcione el marcar/desmarcar todos, imprimir de manera aislada uno informe puntual pero no he conseguido en ningún caso el me imprima los informes de una selección multiple.

He adaptado parte del código:

1---------------------------------------------------------------------------------------------

Option Compare Database

Function MarcarCampo(SióNo As Boolean)
prg = MsgBox("Seguro desea Marcar o Desmarcar todas las Casillas ", vbExclamation + vbYesNo, "Edit")
If prg = vbYes Then
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
rst.MoveFirst
Do Until rst.EOF
rst.Edit
rst("Check_imp_temporal") = SióNo ---------------Esto cambiado de "Mails" al nombre de la nueva      rst.Update                                                               casilla de verificación "Check_imp_temporal"
rst.MoveNext
Loop
rst.Close
End If

2-------------------------------------------------------------------------------------

Private Sub Comando37_Click()
On Error Resume Next
DoCmd.RunCommand acCmdSaveRecord
Dim rst As DAO.Recordset
Dim lasimpresiones As String ------------------------ Lo he cambiados de Loscorreos a las impresiones
Set rst = Me.RecordsetClone
Do Until rst.EOF
If rst("mailing") = True Then losCorreos = losCorreos & rst("email1") & ";" & rst("email2") & ";"
rst.MoveNext ---------------------------------------------- Esta parte no tengo ni idea de como adaptarla
Loop
lasimpresiones = Left(lasimpresiones, Len(lasimpresiones) - 1)  ----- Reemplazado Loscorreos por lasimpresiones

DoCmd.SendObject , , , , , losCorreos, , "xxxxxxxxx", , True
rst.Close

End sub

Gracias y un saludo

El código que has "adaptado" es para enviar mails, no imprimir los registros marcados... El código del botón 37 has de programarlo siguiendo el ejemplo de la respuesta a esta pregunta, no la del ejemplo de envíos de mails...

Buenas de nuevo,

Ya lo tengo casí listo, sin embargo tengo 2 problemas que no se como solucionar:

1.- Cuando lanzo la impresión de los informes selecionados solo lo puedo hacer una vez. Es decir que si cambio posteriormente la selección de registros el botón de lanzar a imprimir no hace nada. Tengo que cerrar el formulario y volver a abrirlo.

2.- Al final he simplificado y he reunido los 3 informes a imprimir en 1 solo botón para que al lanzar la impresión múltiple me impriman los 3 documentos necesarios de cada registro. Sin embargo, no se porque motivo, el contrato me lo lanza a pdf cuando los otros 2 documentos los lanza correctamente a la impresora.

Este es el código puesto:

Option Compare Database

Function MarcarCampo(SióNo As Boolean)
prg = MsgBox("Seguro desea Marcar o Desmarcar todas las Casillas ", vbExclamation + vbYesNo, "Edit")
If prg = vbYes Then
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
rst.MoveFirst
Do Until rst.EOF
rst.Edit
rst("Check_imp_temporal") = SióNo
rst.Update
rst.MoveNext
Loop
rst.Close
End If

------------------------------------------------------------------------

Private Sub Comando37_Click()
Dim rst As DAO.Recordset
Set rst = Me.RecordsetClone
Do Until rst.EOF
If rst("Check_imp_temporal") = True Then
DoCmd.OpenForm "Alquileres", acNormal, , "Id_alquileres=" & rst("Id_alquileres"), acHidden
DoCmd.OpenReport "Contratos_de_alquiler_protec_datos", acViewNormal, , "Id_alquileres=" & rst("Id_alquileres")
DoCmd.OpenReport "Contratos_de_alquiler_temporal", acViewNormal, , "Id_alquileres=" & rst("Id_alquileres")
DoCmd.OpenReport "3inventarios", acViewNormal, , "direccion like '*" & rst("piso2") & "*'"
DoCmd.Close acReport, "Contratos_de_alquiler_temporal"
DoCmd.Close acReport, "3inventarios"
DoCmd.Close acReport, "Contratos_de_alquiler_protec_datos"
DoCmd.Close acForm, "Alquileres"
End If
rst.MoveNext
Loop
rst.Close
Set rst = Nothing

End Sub

Gracias otra vez

El segundo problema ya está resuelto. Solo me faltaría el primero por resolver

No veo nada que haga que el código para imprimir solo te funcione una vez, pero prueba a poner un DoCmd. RunCommand acCmdSaveRecord al final del código donde marques las casillas (que ya no sé cual es)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas