Convertir en PDF un informe dentro de un bucle

Tengo una tabla de alumnos y necesito imprimir las matriculas de cada uno dando un botón que esta en un informe

Los informes se tienen que guardar en PDF en una carpeta determinada ( eso ya lo he conseguido) y de uno en uno con su nombre (idalumno+nombre+apellido)

Mi problema es como definir el bucle para que pase por todos los registros y vaya enviando cada informe.

Private Sub Comando105_Click()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim sqlStr As String

sqlStr = "SELECT * FROM datos del alumno where [fecha_baja] is null "

Set db = CurrentDb()
Set rs = db.OpenRecordset(sqlStr)
rs.MoveFirst

Do While Not rs.EOF
DoCmd.OpenReport "matricula", acViewPreview, , "idalumno= " & Me.idalumno
Dim nomfichero As String
Dim archivo As String
nomfichero = "A-" & Me.idalumno & "-" & Me.NOMBRE_DEL_ALUMNO & " " & Me.APELLIDO_1 & " " & Me.APELLIDO_2 ' es un campo unico
archivo = "C:\Users\Mercedes\Desktop\matriculas\" & nomfichero 'Ruta del directorio donde quieres los pdfs, acabada en la contrabarra (\)
DoCmd.OutputTo acReport, "Matricula", acFormatPDF, archivo & ".PDF"
DoCmd.Close acReport, "Matricula"

rs.MoveNext
Loop

MsgBox ("Todas las matriculas Impresas")

End Sub

1 respuesta

Respuesta
2

En vez de hacer referencia a los campos del formulario (Me. IdAlumno, Me. Apellido...) haz referencia a los campos del recordset que has cargado (rs("IdAlumno"), rs("Apellido")...)

El bucle lo tienes bien hecho.

Un saludo.


Muchas gracias Svein,

He cambiado lo que me has indicado y me sigue dando error en esta línea.

Set rs = db.OpenRecordset(sqlStr)

Private Sub Comando105_Click()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim sqlStr As String

sqlStr = "SELECT * FROM datos del alumno where [fecha_baja] is null "

Set db = CurrentDb()
Set rs = db.OpenRecordset(sqlStr)
rs.MoveFirst

Do While Not rs.EOF
DoCmd.OpenReport "matricula", acViewPreview, , "idalumno= " & Me.idalumno
Dim nomfichero As String
Dim archivo As String
nomfichero = "A-" & rs("IdAlumno") & "-" & rs("NOMBRE_DEL_ALUMNO") & " " & rs("APELLIDO_1") & " " & rs("APELLIDO_2") ' es un campo unico
archivo = "C:\Users\Mercedes\Desktop\matriculas\" & nomfichero 'Ruta del directorio donde quieres los pdfs, acabada en la contrabarra (\)
DoCmd.OutputTo acReport, "Matricula", acFormatPDF, archivo & ".PDF"
DoCmd.Close acReport, "Matricula"

rs.MoveNext
Loop

MsgBox ("Todas las matriculas Impresas")

End Sub

Ponlo así:

sqlStr = "SELECT * FROM [datos del alumno] where [fecha_baja] is null "

Hola Svein,

Me dice que se esperaba 1. pocos parámetros error 3061 en tiempo de ejecución.

Private Sub Comando105_Click()
Dim db As dao.Database
Dim rs As dao.Recordset
Dim sqlStr As String

sqlStr = "SELECT * FROM [datos del alumno] where [fecha_baja] is null "

Set db = CurrentDb()
Set rs = db.OpenRecordset(sqlStr)
rs.MoveFirst

Do While Not rs.EOF
DoCmd.OpenReport "matricula", acViewPreview, , "idalumno= " & Me.idalumno
Dim nomfichero As String
Dim archivo As String
nomfichero = "A-" & rs("IdAlumno") & "-" & rs("NOMBRE_DEL_ALUMNO") & " " & rs("APELLIDO_1") & " " & rs("APELLIDO_2") ' es un campo unico
archivo = "C:\Users\Mercedes\Desktop\matriculas\" & nomfichero 'Ruta del directorio donde quieres los pdfs, acabada en la contrabarra (\)
DoCmd.OutputTo acReport, "Matricula", acFormatPDF, archivo & ".PDF"
DoCmd.Close acReport, "Matricula"

rs.MoveNext
Loop

MsgBox ("Todas las matriculas Impresas")

End Sub

No dices donde te da el error, supondré que en la misma línea...

Comprueba que los nombres que usas en la SQL (en la variable sqlStr) relativos a la tabla y al campo son correctos

¡Gracias! 

Efectivamente no estaban bien escritos. Ya he modificado para evitar esos errores.

Ha funcionado!!! Un millón de gracias por tu ayuda. LLevaba dos días dándole vueltas!

Un saludo,

Winsue

Hola Svein,

si en lugar de guardar estos archivos en una carpeta los quisiera enviar por email directamente a cada alumno el suyo, como debo hacerlo? ¿Es posible?

Muchas gracias,

Winsue

Pues por ejemplo: cambia el DoCmd. OutputTo por un DoCmd. SendObject, y mira las opciones de configuración que tienes.

Hay otras formas de enviar mail: http://siliconproject.com.ar/neckkito/index.php/component/search/?searchword=mail&searchphrase=all&Itemid=435 

¡Gracias! 

Hola Svein,

Lo que me indicaste anteriormente funciona Perfecto. Muchisimas gracias.

Ahora estoy intentando adjuntar otro informe en el mismo mail, es decir, dos informes en un solo mail. Uno de los informes es el mismo para todos, y el otro , el que esta dentro del bucle se va modificando.

No consigo que me mande el que es igual para todos.

Otro tema, como consigo ver en Access 2016 todos los resultados de una consulta de parámetros?

Antes lo lograba con *

Un millón de gracias por tu ayuda,

Winsue

Lo correcto es que hagas nuevas preguntas con tus nuevas dudas, no las encadenes todas en la misa (salvo que tengan que ver con la original), pues si alguien tiene tu misma duda, difícilmente la encontrará si está "escondida" dentro de otra.

Para enviar el informe, mira el método DoCmd.SendObject (https://msdn.microsoft.com/es-es/library/office/ff197046.aspx ) y si quieres algo más "complejo", te remito a los ejemplos que tiene Neckkito Nck en su web.

Las consultas en access 2016 funciona igual que en versiones anteriores, hasta donde yo sé, no hay cambios en ellas

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas