ggodwin
asked on
Need to export a report and .pdf from a filtered table/form.
Please see the attached picture. On the left side is a form of fields that the user must enter some technical information. On the right side is a window with a filter which allows the user to select an occurrence that they want to enter information for. Once the user enters this information the line item is removed. (Task completed)
I would like to be able to create a report for that line item that can be attached to an email and sent to other members.
The information is being entered into and stored in a table called QREVALUE. The primary key to that table is ScrapTag. It would be OK if there was a method that I could simply export a .pdf into a folder location. Triggered by a button or moving on to another record being selected or something.
What would be the best approach for this?
QREVALUE.png
I would like to be able to create a report for that line item that can be attached to an email and sent to other members.
The information is being entered into and stored in a table called QREVALUE. The primary key to that table is ScrapTag. It would be OK if there was a method that I could simply export a .pdf into a folder location. Triggered by a button or moving on to another record being selected or something.
What would be the best approach for this?
QREVALUE.png
Well you can design a report that its recordsource is based on your data/criteria...output it as PDF and email it.Pretty much the way you designed the form you will design the report.
Here's a code procedure that does what you need and then some. The report that is being exported uses a query with a parameter that references a form field that is being filled by the code loop. In the example, Me.txtJob is filled with the current Job value as the loop iterates so the criteria of the Report's RecordSource query would be:
Where Job = Forms!myform!txtJob
Where Job = Forms!myform!txtJob
Private Sub cmdSendEmails_Click()
Dim strValue As String
Dim db As DAO.Database
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim qd As DAO.QueryDef
Dim td As DAO.TableDef
Dim strMsg As String
Dim StartTime As Date
Dim EndTime As Date
Dim stDocName As String
Dim QUOTE As String
Dim DocName As String
Dim strPath As Variant
Dim strSQL As String
Dim CountErr As Integer
Dim TestEmail As Boolean
Dim strEmail As String
On Error GoTo ErrProc
QUOTE = """"
CountErr = 0
Set db = CurrentDb()
stDocName = "Inspectors report"
TestEmail = DLookup("TestEmail", "tblEmail", "RecID = 1")
'get path
strPath = DLookup("FileFolder", "tblEMail", "RecID = 1")
If strPath & "" = "" Then
MsgBox "Please open email defaults form and add document path.", vbOKOnly
Exit Sub
End If
If Right(strPath, 1) <> "\" Then
strPath = strPath & "\"
End If
'delete old email errors
strSQL = "Delete * From tblNoEmailAddress"
DoCmd.SetWarnings False
DoCmd.Hourglass True
DoCmd.RunSQL strSQL
strSQL = "Delete * From tblEmailErrors"
DoCmd.RunSQL strSQL
DoCmd.SetWarnings True
DoCmd.Hourglass False
'open email error recordset.
Set td = db.TableDefs!tblNoEmailAddress
Set rs2 = td.OpenRecordset
Set qd = db.QueryDefs!qGetIRDataJobs
Set rs = qd.OpenRecordset
StartTime = Now()
Me.lblElapsedTime.Visible = False
Me.lblStatus.Visible = True
Me.lblStatus.Caption = "Sending Emails...."
Me.Recalc
DoEvents
DoCmd.Hourglass (True)
' Create the Outlook session.
'Set oOL = CreateObject("Outlook.Application")
'Set oOL = New Outlook.Application
On Error Resume Next
Set oOL = GetObject(, "Outlook.Application")
If Err.Number = 429 Then
Set oOL = CreateObject("Outlook.application")
End If
On Error GoTo ErrProc
If Me.txtJob & "" = "" Then
Do Until rs.EOF = True
Me.txtJob = rs!Job
GoSub PrintOrEmail
rs.MoveNext
Loop
Else
GoSub PrintOrEmail
End If
'Close outlook session
Set oOL = Nothing
DoCmd.Hourglass (False)
DoCmd.SetWarnings (True)
Me.lblStatus.Caption = "Complete"
EndTime = Now()
Me.lblStatus.Visible = True
Me.lblElapsedTime.Visible = True
Me.lblElapsedTime.Caption = DateDiff("n", StartTime, EndTime) & " Minutes"
'close recordsets
rs.Close
rs2.Close
If CountErr > 0 Then
DoCmd.OpenReport "rptNoEmailAddress", acViewPreview
Else
MsgBox "All reports were emailed.", vbOKOnly
End If
If DCount("*", "tblEMailErrors") > 0 Then
DoCmd.OpenReport "rptEMailErrors", acViewPreview
End If
ExitProc:
Exit Sub
PrintOrEmail:
DocName = strPath & rs!Job & "_" & Format(Date, "yyyymmdd") & ".pdf"
If rs!IR_Email & "" = "" Then
DoCmd.OpenReport stDocName, acViewNormal
rs2.AddNew
rs2!Job = Me.txtJob
rs2!PrintDate = Now()
rs2.Update
CountErr = CountErr + 1
Else
Kill DocName 'delete existing file if any so outputto won't hang
DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, DocName, False
' send the PDF via outlook
If TestEmail = True Then
strEmail = "mfalaguerra@safetymarking.net"
Else
strEmail = rs!IR_Email
End If
strValue = Email_Via_Outlook(strEmail, "Quantity Review Report", "", False, DocName)
End If
Return
ErrProc:
Select Case Err.Number
Case 53 'file not found
Resume Next
Case Else
MsgBox Err.Number & "--" & Err.Description
Resume Next
End Select
End Sub
ASKER
John,
Can that be executed right after I enter the last piece of information? I'd like to trigger the report generation either by hitting the save button or by the "next" event. Whether it is closing the db or selecting another record.
Can that be executed right after I enter the last piece of information? I'd like to trigger the report generation either by hitting the save button or by the "next" event. Whether it is closing the db or selecting another record.
This question needs an answer!
Become an EE member today
7 DAY FREE TRIALMembers can start a 7-Day Free trial then enjoy unlimited access to the platform.
View membership options
or
Learn why we charge membership fees
We get it - no one likes a content blocker. Take one extra minute and find out why we block content.