una tabla registros recorrer otra mostrar formulario datos crear consultas consulta como automáticamente actualizar actualizacion vba ms-access access-vba

vba - tabla - Looping a través de un conjunto de registros para generar el informe de Ms-Access en un archivo pdf



mostrar consulta en formulario access (2)

Simplemente use el método DoCmd.OpenReport para filtrar el informe y luego deje el nombre del informe en blanco en DoCmd.OutputTo según los documentos:

ObjectName> Opcional> Variant: si desea generar el objeto activo, especifique el tipo del objeto para el argumento ObjectType y deje este argumento en blanco.

With MyRs .MoveFirst Do While Not .EOF fileName = "Invoice_" & todayDate & !tenant_id & ".pdf" DoCmd.OpenReport "Invoice", acViewReport, , "[tenant_id] = " & !tenant_id, acHidden DoCmd.OutputTo acOutputReport, , acFormatPDF, pathName & fileName .MoveNext Loop End With

Estoy intentando obtener el archivo pdf por tenant_id usando docmd.outputTo . Desafortunadamente, esta rutina produce un archivo PDF de salida que todos están en un mismo tenant_id . Si docmd.outputTo último parámetro pathName & fileName entonces es necesario el nombre del archivo a través del diálogo y el archivo de salida filtrados por tenant_id . Cualquier ayuda sería apreciada.

Aquí está la consulta de la factura: SELECT * FROM tblInvoice WHERE tenant_id = CurTenantID()

Public Sub Output() Dim MyRs As DAO.Recordset Dim rpt As Report Dim fileName As String, pathName As String, todayDate As String pathName = "C:/Users/abzalali/Dropbox/tenant_db/Invoice/" todayDate = Format(Date, "MMDDYYYY") Set MyRs = CurrentDb.OpenRecordset("SELECT tenant_id, name, company, email FROM qryEmailClientList") DoCmd.OpenReport "Invoice", acPreview, , , acHidden Set rpt = Reports("Invoice") With MyRs .MoveFirst Do While Not .EOF fileName = "Invoice_" & todayDate & !tenant_id & ".pdf" rpt.Filter = "[tenant_id] = " & !tenant_id rpt.FilterOn = True DoCmd.OutputTo acOutputReport, "Invoice", acFormatPDF, pathName & fileName .MoveNext Loop End With End Sub


Como DoCmd.OutputTo carece de parámetros para el filtrado, la mejor opción es basar el informe en una función pública para obtener el ID actual.

P.ej

'' Function to both set and retrieve the current Tenant ID Public Function CurTenantID(Optional SetTenantID As Long = 0) As Long Static TenantID As Long If SetTenantID > 0 Then TenantID = SetTenantID End If CurTenantID = TenantID End Function

Su informe utiliza esta función en su fuente de registro, por ejemplo

SELECT * FROM tblInvoice WHERE tenant_id = CurTenantID()

Y al generar los informes PDF en el ciclo, usa el parámetro SetTenantID :

Public Sub Output() Dim MyRs As DAO.Recordset Dim fileName As String, pathName As String, todayDate As String pathName = "C:/Users/abzalali/Dropbox/tenant_db/Invoice/" todayDate = Format(Date, "MMDDYYYY") Set MyRs = CurrentDb.OpenRecordset("SELECT tenant_id, name, company, email FROM qryEmailClientList") With MyRs '' .MoveFirst -- unneeded after OpenRecordset() Do While Not .EOF fileName = "Invoice_" & todayDate & !tenant_id & ".pdf" Call CurTenantID(!tenant_id) DoCmd.OutputTo acOutputReport, "Invoice", acFormatPDF, pathName & fileName .MoveNext Loop End With End Sub