|
Question : email a .pdf
|
|
II have a data entry form . After a person enters data they need to view an Access report of that data to see that it is correct. After they review the report, then the report needs to be emailed to Headquarters.
I want to a button on the form that says, "Save and Email". I would like the code to: 1. Save the report as a .pdf 2. Email it from Outlook (I have some of the code for that and will use the Outlook board for help)
Questions: 1. Is there another option other than a .pdf? I am not sure the client as Adobe Writer. 2. Have any of you done something similar? What were the results?
Thanks. Sasha
|
|
Answer : email a .pdf
|
|
Here's a routine I developed that does what you are asking. It utilizes the PDF995 pdf writer (inexpensive). A benefit is that the PDF995 writer is can be configured to direct output to a new mail message with the PDF file already attached (that's how it is implemented here). I created a toolbar button to call the function. The toolbar button is displayed on all report Print Preview screens.
Public Function CopyObject2() On Error GoTo Err_CopyObject2 'this function determines the type and name of the current active 'database object, creates a copy named based upon the system number 'retrieved, assigns the PrtDevNames & PrtDevMode properties based 'upon a blank report template (set to print to the PDF writer) and 'then prints the report. The new database object is deleted after 'the OutputToPDF function concludes.
Dim intCurrentType As Integer, intState As Integer Dim strQuote As String, varSale As Variant Dim strCurrentName As String, strJobNumber As String Dim strMsg As String, strErrMsg As String, strObjMsg As String Dim intSuccess As Integer Dim rptNew As Report, rptTemplate As Report strMsg = "Cannot copy database object - No job number specified" strErrMsg = "Error copying/deleting database object. Please contact" strErrMsg = strErrMsg & vbNewLine & "your administrator." strObjMsg = "Only reports can be output to PDF format" 'get current db object type & name intCurrentType = Application.CurrentObjectType strCurrentName = Application.CurrentObjectName 'make sure the current object is a report (3) If intCurrentType <> 3 Then MsgBox strObjMsg, vbOKOnly, "Not Allowed" GoTo Exit_CopyObject2 End If
'''''''''' I've eliminated a portion that obtained the current quote/invoice number for use in naming the PDF output '''''''''' this remaining piece of code uses the current report name and appends and underscore 'if no system number, use current report name appended with "_" If strJobNumber = "" Then strJobNumber = strCurrentName & "_" End If
'create copy of current object naming it with the system number DoCmd.CopyObject , strJobNumber, intCurrentType, strCurrentName 'assign the system number to public variable ObjectName = strJobNumber PrintPDF: 'Set PrtDevNames, PrtDevMode properties and print object 'close current report DoCmd.Close acReport, strCurrentName 'open new report & template report in design mode so 'properties can be manipulated DoCmd.OpenReport ObjectName, acViewDesign DoCmd.OpenReport "rptPDFPrinterTemplate", acViewDesign Set rptNew = Reports(ObjectName) Set rptTemplate = Reports("rptPDFPrinterTemplate") 'assign PrtDevNames & PrtDevMode property for new report rptNew.PrtDevNames = rptTemplate.PrtDevNames rptNew.PrtDevMode = rptTemplate.PrtDevMode 'close reports DoCmd.Close acReport, ObjectName, acSaveYes DoCmd.Close acReport, "rptPDFPrinterTemplate", acSaveNo 'Print new report DoCmd.OpenReport ObjectName, acViewNormal 'delete object only if it was created above If ObjectName <> strCurrentName Then DoCmd.DeleteObject intCurrentType, ObjectName End If 'reopen current object DoCmd.OpenReport strCurrentName, acViewPreview 'Debug.Print intCurrentType 'Debug.Print strCurrentName 'Debug.Print strJobNumber Exit_CopyObject2: Set rptNew = Nothing Set rptTemplate = Nothing Exit Function Err_CopyObject2: MsgBox strErrMsg, vbOKOnly, "Output Error" Resume Exit_CopyObject2 End Function
To use this function PDF995 needs to be installed on the computer (it's free but displays banners; purchasing license eliminates banners). It will show up as a new printer. You'll need to confirue PDF995 to launch a new e-mail with the PDF attached as opposed to displaying a Save As dialogue box. Read the FAQ on software995's site for more info. You'll also need to create a blank report as the template (named rptPDFPrinterTemplate). Set this reports printer to the PDF995 printer and then save it.
When the user clicks the toolbar button Access will create a copy of the current report (with the underscore appended to the name), print the report to the PDF995 writer, and then delete the newly created report leaving the original intact. The PDF995 writer will output the newly created PDF file as an attachment to a new e-mail message using the default e-mail client on the machine (no need to automate Outlook).
Give it a shot and see what you think. OM Gang
|
|
|
|