Crear varios pdfs de una consulta/informe Access

Tengo una consulta en Access de este estilo (3 campos: empresa - nombre - email):

Empresa1 - Fran - emailfran
Empresa1 - Fernando - emailfernando
Empresa2 - Nuria - emailnuria
Empresa3 - Elsa - emailelsa
...

A través de un informe agrupado por el campo de empresa saco un informe en 3 hojas (en este ejemplo) con el nombre de la empresa y las personas que hay en ella en cada hoja, tal que Hoja 1, titulo Empresa1 y salen Fran y Fernando, Hoja 2 titulo empresa2 y sale Nuria,...

Como hacer que en vez de un pdf de 3 hojas, ¿saliesen 3 pdfs y encima con el nombre de la empresa?

Esto sería para un listado que lo mismo tiene 100 empresas que mañana 98.

1 Respuesta

Respuesta
1

Modifica el informe para un único PDF (esto es: filtrando por empresa).

Solo se precisa crear un bucle con el campo 'empresa' que aportase el nombre para el filtro en la llamada -lo permite la llamada al informe o formulario- y así se generarían tantos PDFs como empresas se le indicasen al bucle (por si entre las 100 o mas empresas se necesitase filtrar por país región o zona comercial.)

Como se haría el bucle?

Tengo esto:

Dim db As Database

Dim rs As Recordset


Set db = CurrentDb


Set rs = db.OpenRecordset("Select * from CONS_S")


Do While Not rs.EOF
Dim opc As String
opc = Name

AQUÍ NO ME COGE EL CAMPO NAME DE LA CONSULTA CONS_S QUE ES LO QUE QUIERO USAR COMO NOMBRE DEL PDF Y Para filtrar el informe

DoCmd.OpenReport "INF_ASA", acViewPreview, "CONS_S", "pes_anagram ='" & opc & "'"

Entonces aquí me coge un campo vacío que entiendo que es porque está mal cogido el opc


DoCmd.OutputTo acOutputReport, "INF_ASA", acFormatPDF, "\\C\" & opc & ".pdf", False


rs.MoveNext


Loop

Para hacer referencia al contenido de un recordset, hay que utilizar la sintaxis correcta, si lo he entendido, unas ligeras modificaciones deberían bastar
.- Modificando lo publicado:

Dim rs As Recordset
Set rs = CurrentDb.OpenRecordset("Select Name from CONS_S")
Do While Not rs.EOF
DoCmd.OpenReport "INF_ASA", acViewPreview, "CONS_S", "pes_anagram ='" & rs!Name & "'"
DoCmd.OutputTo acOutputReport, "INF_ASA", acFormatPDF, "\\C\" & rs!Name & ".pdf", False
rs.MoveNext
Loop
rs.Close
Set rs = Nothing

Se observara que para tomar el dato del recordset  la sintaxis es otra.
En mi opinión no se precisa una variable cuando el valor esta disponible pues mientras no se cambie de registro el valor de/para 'opc' esta en el recordset ('rs! Name')
Si se desea mantener el código original:

Opc = rs! Name

Si no se van a utilizar 'todos' los campos de la consulta lo correcto es traerse solo los imprescindibles (menos volumen de datos => menos recursos ocupados => mayor velocidad de ejecución)

En cualquier caso, una vez que se termina de utilizar el recordset se deben de liberar los recursos utilizados  (rs.Close y Set rs = Nothing)

Ojeando el post inicial, algo me ha llamado la atención:
Lo que se desea obtener de la consulta es el nombre de la empresa (no el del empleado, eso solo le interesa al informe).
La consulta papara el recorset debería ser algo similar a:

Set rs= CurrentDb.OpenRecordset ("Select DISTINCT empresa From Cons_S")

¡Gracias!

Justo es lo que necesitaba.

La verdad que has sido de gran ayuda.

Me defiendo con esto del vba en Access pero hay cosas que saco por lógica y no por conocimientos. Muchas gracias

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas