By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
424,647 Members | 1,124 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 424,647 IT Pros & Developers. It's quick & easy.

Reports & Email

P: 8
I've been looking around and I got some info but not to what I really need.

I have a Database with several values, one being a date. When four days have passed from this date I get a warning message. Is there a way to to display which forms have this warning at present and display it somewhere, like in a report or another form.

Also if that is possible is there away I can get that to be emailed via my smtp server?

Many thanks,

Dollarstar
Nov 13 '08 #1
Share this Question
Share on Google+
10 Replies


P: 90
Well without more info I can't say for sure but I think you need a query.

Add the relevant form to a query, including the primary key (or whatever fields you want) and the date. In the Conditions under the date you'll need "<Date()-4"

The just add it to a report (use the wizard if you like/need)

As for the emailing, I do that here, it takes a snapshot of the report, saves it as a PDF then attaches it to an email.
I can post the code if you like?
Nov 13 '08 #2

P: 8
I got a query. With the details I need sending. I've just this minute made a report, and it works!

Oh and yes please about the code, I'm not to great with the coding side.

Sorry to complicate things further, but is there a way to get it to automatically email the report to someone weekly?
Nov 13 '08 #3

P: 90
There are three parts of code needed here. One is kinda large (I apologise..)...
I'll try and explain as well as I can.

This first piece needs to go in a module all of its own. A simple Module - New - Copy & Paste will do the trick here.
Expand|Select|Wrap|Line Numbers
  1. Option Compare Database
  2. Option Explicit
  3.  
  4. 'DEVELOPED AND TESTED UNDER MICROSOFT ACCESS 97 through A2003
  5. 'Copyright: Stephen Lebans - Lebans Holdings 1999 Ltd.
  6. 'Distribution:
  7. ' Plain and simple you are free to use this source within your own applications whether private or commercial, without cost or obligation, other that keeping  the copyright notices intact. 
  8. 'No public notice of copyright is required.
  9. ' You may not resell this source code by itself or as part of a collection.
  10. ' You may not post this code or any portion of this code in electronic format.
  11. ' The source may only be downloaded from:
  12. ' www.lebans.com
  13. 'Name:      ConvertReportToPDF
  14. 'Version:   7.51
  15. 'Purpose:
  16. '*1) Export report to Snapshot and then to PDF. Output exact duplicate of a Report to PDF.
  17. '**************************************************
  18. 'Author:    Stephen Lebans
  19. 'Email:     Stephen@lebans.com
  20. 'Web Site:  www.lebans.com
  21. 'Date:      Feb 21, 2006, 11:11:11 AM
  22. 'Dependencies: DynaPDF.dll  StrStorage.dll  clsCommonDialog
  23. 'Inputs:    See inline Comments for explanation
  24. 'Output:    See inline Comments for explanation
  25. 'Credits:   Anyone who wants some!
  26. 'BUGS:      Please report any bugs to my email address.
  27. 'What's Missing:
  28. '           Enhanced Error Handling
  29. 'How it Works:
  30. ' A SnapShot file is created in the normal manner by code like:
  31. '       'Export the selected Report to SnapShot format
  32. '       DoCmd.OutputTo acOutputReport, rptName, "SnapshotFormat(*.snp)", _
  33. '       strPathandFileName
  34. ' rptName is the desired Report we are working with.
  35. ' strPathandFileName can be anything, in this Class it is a
  36. ' Temporary FileName and Path created with calls to the
  37. ' GetTempPath and GetUniqueFileName API's.
  38. ' We then pass the FileName to the SetupDecompressOrCopyFile API.
  39. ' This will decompress the original SnapShot file into a
  40. ' Temporary file with the same name but a "tmp" extension.
  41. ' The decompressed Temp SnapShot file is then passed to the
  42. ' ConvertUncompressedSnapshotToPDF function exposed by the StrStorage DLL.
  43. ' The declaration for this call is at the top of this module.
  44. ' The function uses the Structured Storage API's to
  45. ' open and read the uncompressed Snapshot file. Within this file,
  46. ' there is one Enhanced Metafile for each page of the original report.
  47. ' Additionally, there is a Header section that contains, among other things,
  48. ' a copy of the Report's Printer Devmode structure. We need this to
  49. ' determine the page size of the report.
  50. 'The StrStorage DLL exposes one function.
  51. 'Public Function ConvertUncompressedSnapshotToPDF( _
  52. 'UnCompressedSnapShotName As String, _
  53. 'OutputPDFname As String = "", _
  54. 'Optional CompressionLevel As Long = 0, _
  55. 'Optional PasswordOwner As String = "" _
  56. 'Optional PasswordOpenAs String = "" _
  57. 'Optional PasswordRestrictions as Long = 0, _
  58. 'Optional PDFNoFontEmbedding As Long = 0 _
  59. ') As Boolean
  60. ' Now we call the ConvertUncompressedSnapshotToPDF funtion exposed by the StrStorage DLL.
  61. 'blRet = ConvertUncompressedSnapshot(sFileName as String, sPDFFileName as String)
  62. 'Have Fun!
  63.  
  64. ' ******************************************************
  65.  
  66. Public Declare Function ConvertUncompressedSnapshot Lib "StrStorage.dll" _
  67. (ByVal UnCompressedSnapShotName As String, _
  68. ByVal OutputPDFname As String, _
  69. Optional ByVal CompressionLevel As Long = 0, _
  70. Optional ByVal PasswordOwner As String = "", _
  71. Optional ByVal PasswordOpen As String = "", _
  72. Optional ByVal PasswordRestrictions As Long = 0, _
  73. Optional PDFNoFontEmbedding As Long = 0 _
  74. ) As Boolean
  75.  
  76. ' For debugging with Visual C++
  77. 'Lib "C:\VisualCsource\Debug\StrStorage.dll"
  78.  
  79. Private Declare Function ShellExecuteA Lib "shell32.dll" _
  80. (ByVal hwnd As Long, ByVal lpOperation As String, _
  81. ByVal lpFile As String, ByVal lpParameters As String, _
  82. ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long
  83.  
  84. Private Declare Function LoadLibrary Lib "kernel32" _
  85. Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
  86.  
  87. Private Declare Function FreeLibrary Lib "kernel32" _
  88. (ByVal hLibModule As Long) As Long
  89.  
  90. Private Declare Function GetTempPath Lib "kernel32" _
  91. Alias "GetTempPathA" (ByVal nBufferLength As Long, _
  92. ByVal lpBuffer As String) As Long
  93.  
  94. Private Declare Function GetTempFileName _
  95. Lib "kernel32" Alias "GetTempFileNameA" _
  96. (ByVal lpszPath As String, _
  97. ByVal lpPrefixString As String, _
  98. ByVal wUnique As Long, _
  99. ByVal lpTempFileName As String) As Long
  100.  
  101. Private Declare Function SetupDecompressOrCopyFile _
  102. Lib "setupAPI" _
  103. Alias "SetupDecompressOrCopyFileA" ( _
  104. ByVal SourceFileName As String, _
  105. ByVal TargetFileName As String, _
  106. ByVal CompressionType As Integer) As Long
  107.  
  108. Private Declare Function SetupGetFileCompressionInfo _
  109. Lib "setupAPI" _
  110. Alias "SetupGetFileCompressionInfoA" ( _
  111. ByVal SourceFileName As String, _
  112. TargetFileName As String, _
  113. SourceFileSize As Long, _
  114. DestinationFileSize As Long, _
  115. CompressionType As Integer _
  116. ) As Long
  117.  
  118. 'Compression types
  119. Private Const FILE_COMPRESSION_NONE = 0
  120. Private Const FILE_COMPRESSION_WINLZA = 1
  121. Private Const FILE_COMPRESSION_MSZIP = 2
  122.  
  123. Private Const Pathlen = 256
  124. Private Const MaxPath = 256
  125.  
  126. ' Allow user to set FileName instead
  127. ' of using API Temp Filename or
  128. ' popping File Dialog Window
  129. Private mSaveFileName As String
  130.  
  131. ' Full path and name of uncompressed SnapShot file
  132. Private mUncompressedSnapFile As String
  133.  
  134. ' Name of the Report we ' working with
  135. Private mReportName As String
  136.  
  137. ' Instance returned from LoadLibrary calls
  138. Private hLibDynaPDF As Long
  139. Private hLibStrStorage As Long
  140.  
  141. Public Function ConvertReportToPDF( _
  142. Optional RptName As String = "", _
  143. Optional SnapshotName As String = "", _
  144. Optional OutputPDFname As String = "", _
  145. Optional ShowSaveFileDialog As Boolean = False, _
  146. Optional StartPDFViewer As Boolean = True, _
  147. Optional CompressionLevel As Long = 0, _
  148. Optional PasswordOwner As String = "", _
  149. Optional PasswordOpen As String = "", _
  150. Optional PasswordRestrictions As Long = 0, _
  151. Optional PDFNoFontEmbedding As Long = 0 _
  152. ) As Boolean
  153.  
  154. ' RptName is the name of a report contained within this MDB
  155. ' SnapshotName is the name of an existing Snapshot file
  156. ' OutputPDFname is the name you select for the output PDF file
  157. ' ShowSaveFileDialog is a boolean param to specify whether or not to display
  158. ' the standard windows File Dialog window to select an exisiting Snapshot file
  159. ' CompressionLevel - not hooked up yet
  160. ' PasswordOwner  - not hooked up yet
  161. ' PasswordOpen - not hooked up yet
  162. ' PasswordRestrictions - not hooked up yet
  163. ' PDFNoFontEmbedding - Do not Embed fonts in PDF. Set to 1 to stop the
  164. ' default process of embedding all fonts in the output PDF. If you are
  165. ' using ONLY - any of the standard Windows fonts
  166. ' using ONLY - any of the standard 14 Fonts natively supported by the PDF spec
  167. 'The 14 Standard Fonts
  168. 'All version of Adobe's Acrobat support 14 standard fonts. These fonts are always available
  169. 'independent whether they're embedded or not.
  170. 'Family name PostScript name Style
  171. 'Courier Courier fsNone
  172. 'Courier Courier-Bold fsBold
  173. 'Courier Courier-Oblique fsItalic
  174. 'Courier Courier-BoldOblique fsBold + fsItalic
  175. 'Helvetica Helvetica fsNone
  176. 'Helvetica Helvetica-Bold fsBold
  177. 'Helvetica Helvetica-Oblique fsItalic
  178. 'Helvetica Helvetica-BoldOblique fsBold + fsItalic
  179. 'Times Times-Roman fsNone
  180. 'Times Times-Bold fsBold
  181. 'Times Times-Italic fsItalic
  182. 'Times Times-BoldItalic fsBold + fsItalic
  183. 'Symbol Symbol fsNone, other styles are emulated only
  184. 'ZapfDingbats ZapfDingbats fsNone, other styles are emulated only
  185.  
  186. Dim s As String
  187. Dim blRet As Boolean
  188. ' Let's see if the DynaPDF.DLL is available.
  189. blRet = LoadLib()
  190. If blRet = False Then
  191.     ' Cannot find DynaPDF.dll or StrStorage.dll file
  192.     Exit Function
  193. End If
  194.  
  195. On Error GoTo ERR_CREATSNAP
  196.  
  197. Dim strPath  As String
  198. Dim strPathandFileName  As String
  199. Dim strEMFUncompressed As String
  200.  
  201. Dim sOutFile As String
  202. Dim lngRet As Long
  203.  
  204. ' Init our string buffer
  205. strPath = Space(Pathlen)
  206.  
  207. 'Save the ReportName to a local var
  208. mReportName = RptName
  209.  
  210. ' Let's kill any existing Temp SnapShot file
  211. If Len(mUncompressedSnapFile & vbNullString) > 0 Then
  212.     Kill mUncompressedSnapFile
  213.     mUncompressedSnapFile = ""
  214. End If
  215.  
  216. ' If we have been passed the name of a Snapshot file then
  217. ' skip the Snapshot creation process below
  218. If Len(SnapshotName & vbNullString) = 0 Then
  219.  
  220.     ' Make sure we were passed a ReportName
  221.     If Len(RptName & vbNullString) = 0 Then
  222.         ' No valid parameters - FAIL AND EXIT!!
  223.         ConvertReportToPDF = ""
  224.         Exit Function
  225.     End If
  226.  
  227.     ' Get the Systems Temp path
  228.     ' Returns Length of path(num characters in path)
  229.     lngRet = GetTempPath(Pathlen, strPath)
  230.     ' Chop off NULLS and trailing "\"
  231.     strPath = Left(strPath, lngRet) & chr(0)
  232.  
  233.     ' Now need a unique Filename
  234.     ' locked from a previous aborted attemp.
  235.     ' Needs more work!
  236.     strPathandFileName = GetUniqueFilename(strPath, "SNP" & chr(0), "snp")
  237.  
  238.     ' Export the selected Report to SnapShot format
  239.     DoCmd.OutputTo acOutputReport, RptName, "SnapshotFormat(*.snp)", _
  240.        strPathandFileName
  241.     ' Make sure the process has time to complete
  242.     DoEvents
  243.  
  244. Else
  245.     strPathandFileName = SnapshotName
  246.  
  247. End If
  248.  
  249. ' Let's decompress into same filename but change type to ".tmp"
  250. 'strEMFUncompressed = Mid(strPathandFileName, 1, Len(strPathandFileName) - 3)
  251. 'strEMFUncompressed = strEMFUncompressed & "tmp"
  252. Dim sPath As String * 512
  253. lngRet = GetTempPath(512, sPath)
  254.  
  255. strEMFUncompressed = GetUniqueFilename(sPath, "SNP", "tmp")
  256.  
  257. lngRet = SetupDecompressOrCopyFile(strPathandFileName, strEMFUncompressed, 0&)
  258.  
  259. If lngRet <> 0 Then
  260.     Err.Raise vbObjectError + 525, "ConvertReportToPDF.SetupDecompressOrCopyFile", _
  261.     "Sorry...cannot Decompress SnapShot File" & vbCrLf & _
  262.     "Please select a different Report to Export"
  263. End If
  264.  
  265. ' Set our uncompressed SnapShot file name var
  266. mUncompressedSnapFile = strEMFUncompressed
  267.  
  268. ' Remember to Cleanup our Temp SnapShot File if we were NOT passed the
  269. ' Snapshot file as the optional param
  270. If Len(SnapshotName & vbNullString) = 0 Then
  271.     Kill strPathandFileName
  272. End If
  273.  
  274. ' Do we name output file the same as the input file name
  275. ' and simply change the file extension to .PDF or
  276. ' do we show the File Save Dialog
  277. If ShowSaveFileDialog = False Then
  278.  
  279.     ' let's decompress into same filename but change type to ".tmp"
  280.     ' But first let's see if we were passed an output PDF file name
  281.     If Len(OutputPDFname & vbNullString) = 0 Then
  282.         sOutFile = Mid(strPathandFileName, 1, Len(strPathandFileName) - 3)
  283.         sOutFile = sOutFile & "PDF"
  284.     Else
  285.         sOutFile = OutputPDFname
  286.     End If
  287.  
  288. Else
  289.     ' Call File Save Dialog
  290.     sOutFile = fFileDialog()
  291.     If Len(sOutFile & vbNullString) = 0 Then
  292.         Exit Function
  293.     End If
  294.  
  295. End If
  296.  
  297. ' Call our function in the StrStorage DLL
  298. ' Note the Compression and Password params are not hooked up yet.
  299. blRet = ConvertUncompressedSnapshot(mUncompressedSnapFile, sOutFile, _
  300. CompressionLevel, PasswordOwner, PasswordOpen, PasswordRestrictions, PDFNoFontEmbedding)
  301.  
  302. If blRet = False Then
  303. Err.Raise vbObjectError + 526, "ConvertReportToPDF.ConvertUncompressedSnaphot", _
  304.     "Sorry...damaged SnapShot File" & vbCrLf & _
  305.     "Please select a different Report to Export"
  306. End If
  307.  
  308. ' Do we open new PDF in registered PDF viewer on this system?
  309. If StartPDFViewer = True Then
  310.  ShellExecuteA Application.hWndAccessApp, "open", sOutFile, vbNullString, vbNullString, 1
  311. End If
  312.  
  313. ' Success
  314. ConvertReportToPDF = True
  315.  
  316. EXIT_CREATESNAP:
  317.  
  318. ' Let's kill any existing Temp SnapShot file
  319. 'If Len(mUncompressedSnapFile & vbNullString) > 0 Then
  320.      On Error Resume Next
  321.    Kill mUncompressedSnapFile
  322.     mUncompressedSnapFile = ""
  323. 'End If
  324.  
  325. ' If we aready loaded then free the library
  326. If hLibStrStorage <> 0 Then
  327.     hLibStrStorage = FreeLibrary(hLibStrStorage)
  328. End If
  329.  
  330. If hLibDynaPDF <> 0 Then
  331.     hLibDynaPDF = FreeLibrary(hLibDynaPDF)
  332. End If
  333.  
  334. Exit Function
  335.  
  336. ERR_CREATSNAP:
  337. MsgBox Err.Description, vbOKOnly, Err.Source & ":" & Err.Number
  338. mUncompressedSnapFile = ""
  339. ConvertReportToPDF = False
  340. Resume EXIT_CREATESNAP
  341.  
  342. End Function
  343.  
  344. Private Function LoadLib() As Boolean
  345. Dim s As String
  346. Dim blRet As Boolean
  347.  
  348. On Error Resume Next
  349.  
  350. LoadLib = False
  351.  
  352. ' If we aready loaded then free the library
  353. If hLibDynaPDF <> 0 Then
  354.     hLibDynaPDF = FreeLibrary(hLibDynaPDF)
  355. End If
  356.  
  357. ' Our error string
  358. s = "Sorry...cannot find the DynaPDF.dll file" & vbCrLf
  359. s = s & "Please copy the DynaPDF.dll file to your Windows System32 folder or into the same folder as this Access MDB."
  360.  
  361. ' OK Try to load the DLL assuming it is in the Window System folder
  362. hLibDynaPDF = LoadLibrary("DynaPDF.dll")
  363. If hLibDynaPDF = 0 Then
  364.     ' See if the DLL is in the same folder as this MDB
  365.     ' CurrentDB works with both A97 and A2K or higher
  366.     hLibDynaPDF = LoadLibrary(CurrentDBDir() & "DynaPDF.dll")
  367.     If hLibDynaPDF = 0 Then
  368.         MsgBox s, vbOKOnly, "MISSING DynaPDF.dll FILE"
  369.         LoadLib = False
  370.         Exit Function
  371.     End If
  372. End If
  373.  
  374. ' Our error string
  375. s = "Sorry...cannot find the StrStorage.dll file" & vbCrLf
  376. s = s & "Please copy the StrStorage.dll file to your Windows System32 folder or into the same folder as this Access MDB."
  377.  
  378. ' ** Commented out for Debugging only - Must be active
  379. ' ***************************************************************************
  380. '
  381. ' OK Try to load the DLL assuming it is in the Window System folder
  382. hLibStrStorage = LoadLibrary("StrStorage.dll")
  383. If hLibStrStorage = 0 Then
  384.     ' See if the DLL is in the same folder as this MDB
  385.     ' CurrentDB works with both A97 and A2K or higher
  386.     hLibStrStorage = LoadLibrary(CurrentDBDir() & "StrStorage.dll")
  387.     If hLibStrStorage = 0 Then
  388.         MsgBox s, vbOKOnly, "MISSING StrStorage.dll FILE"
  389.         Exit Function
  390.     End If
  391. End If
  392.  
  393. ' RETURN SUCCESS
  394. LoadLib = True
  395. End Function
  396.  
  397. '******************** Code Begin ****************
  398. 'Code courtesy of
  399. 'Terry Kreft & Ken Getz
  400. '
  401. Private Function CurrentDBDir() As String
  402. Dim strDBPath As String
  403. Dim strDBFile As String
  404.     strDBPath = CurrentDb.Name
  405.     strDBFile = Dir(strDBPath)
  406.     CurrentDBDir = Left$(strDBPath, Len(strDBPath) - Len(strDBFile))
  407. End Function
  408. '******************** Code End ****************
  409.  
  410. Private Function GetUniqueFilename(Optional path As String = "", _
  411. Optional Prefix As String = "", _
  412. Optional UseExtension As String = "") _
  413. As String
  414.  
  415. ' originally Posted by Terry Kreft
  416. ' to: comp.Databases.ms -Access
  417. ' Subject:  Re: Creating Unique filename ??? (Dev code)
  418. ' Date: 01/15/2000
  419. ' Author: Terry Kreft <terry.kreft@mps.co.uk>
  420.  
  421. ' SL Note: Input strings must be NULL terminated.
  422. ' Here it is done by the calling function.
  423.  
  424.   Dim wUnique As Long
  425.   Dim lpTempFileName As String
  426.   Dim lngRet As Long
  427.  
  428.   wUnique = 0
  429.   If path = "" Then path = CurDir
  430.   lpTempFileName = String(MaxPath, 0)
  431.   lngRet = GetTempFileName(path, Prefix, _
  432.                             wUnique, lpTempFileName)
  433.  
  434.   lpTempFileName = Left(lpTempFileName, _
  435.                         InStr(lpTempFileName, chr(0)) - 1)
  436.   Call Kill(lpTempFileName)
  437.   If Len(UseExtension) > 0 Then
  438.     lpTempFileName = Left(lpTempFileName, Len(lpTempFileName) - 3) & UseExtension
  439.   End If
  440.   GetUniqueFilename = lpTempFileName
  441. End Function
  442.  
  443. Private Function fFileDialog() As String
  444. ' Calls the API File Save Dialog Window
  445. ' Returns full path to new File
  446.  
  447. On Error GoTo Err_fFileDialog
  448.  
  449. ' Call the File Common Dialog Window
  450. Dim clsDialog As Object
  451. Dim strTemp As String
  452. Dim strFname As String
  453.  
  454. Set clsDialog = New clsCommonDialog
  455.  
  456. ' Fill in our structure
  457. ' I'll leave in how to select Gif and Jpeg to
  458. ' show you how to build the Filter in case you want
  459. ' to use this code in another project.
  460. clsDialog.Filter = "PDF (*.PDF)" & chr$(0) & "*.PDF" & chr$(0)
  461. 'clsDialog.Filter = clsDialog.Filter & "Gif (*.GIF)" & Chr$(0) & "*.GIF" & Chr$(0)
  462. 'clsDialog.Filter = "ALL (*.*)" & Chr$(0) & "*.*" & Chr$(0)
  463. clsDialog.hDC = 0
  464. clsDialog.MaxFileSize = 256
  465. clsDialog.Max = 256
  466. clsDialog.FileTitle = vbNullString
  467. clsDialog.DialogTitle = "Please Select a path and Enter a Name for the PDF File"
  468. clsDialog.InitDir = vbNullString
  469. clsDialog.DefaultExt = vbNullString
  470.  
  471. ' Display the File Dialog
  472. clsDialog.ShowSave
  473.  
  474. ' See if user clicked Cancel or even selected
  475. ' the very same file already selected
  476. strFname = clsDialog.fileName
  477. 'If Len(strFname & vbNullString) = 0 Then
  478. ' Raise the exception
  479.  ' Err.Raise vbObjectError + 513, "clsPrintToFit.fFileDialog", _
  480.   '"Please type in a Name for a New File"
  481. 'End If
  482.  
  483. ' Return File Path and Name
  484. fFileDialog = strFname
  485.  
  486. Exit_fFileDialog:
  487.  
  488. Err.Clear
  489. Set clsDialog = Nothing
  490. Exit Function
  491.  
  492. Err_fFileDialog:
  493. fFileDialog = ""
  494. MsgBox Err.Description, vbOKOnly, Err.Source & ":" & Err.Number
  495. Resume Exit_fFileDialog
  496.  
  497. End Function
  498.  
  499. Public Function fFileDialogSnapshot() As String
  500. ' Calls the API File Open Dialog Window
  501. ' Returns full path to existing Snapshot File
  502.  
  503. On Error GoTo Err_fFileDialog
  504.  
  505. ' Call the File Common Dialog Window
  506. Dim clsDialog As Object
  507. Dim strTemp As String
  508. Dim strFname As String
  509.  
  510. Set clsDialog = New clsCommonDialog
  511.  
  512. ' Fill in our structure
  513. ' I'll leave in how to select Gif and Jpeg to
  514. ' show you how to build the Filter in case you want
  515. ' to use this code in another project.
  516. clsDialog.Filter = "SNAPSHOT (*.SNP)" & chr$(0) & "*.SNP" & chr$(0)
  517. 'clsDialog.Filter = "ALL (*.*)" & Chr$(0) & "*.*" & Chr$(0)
  518. clsDialog.hDC = 0
  519. clsDialog.MaxFileSize = 256
  520. clsDialog.Max = 256
  521. clsDialog.FileTitle = vbNullString
  522. clsDialog.DialogTitle = "Please Select a Snapshot File"
  523. clsDialog.InitDir = vbNullString
  524. clsDialog.DefaultExt = vbNullString
  525.  
  526. ' Display the File Dialog
  527. clsDialog.ShowOpen
  528.  
  529. ' See if user clicked Cancel or even selected
  530. ' the very same file already selected
  531. strFname = clsDialog.fileName
  532. If Len(strFname & vbNullString) = 0 Then
  533. ' Do nothing. Add your desired error logic here.
  534. End If
  535.  
  536. ' Return File Path and Name
  537. fFileDialogSnapshot = strFname
  538.  
  539. Exit_fFileDialog:
  540.  
  541. Err.Clear
  542. Set clsDialog = Nothing
  543. Exit Function
  544.  
  545. Err_fFileDialog:
  546. fFileDialogSnapshot = ""
  547. MsgBox Err.Description, vbOKOnly, Err.Source & ":" & Err.Number
  548. Resume Exit_fFileDialog
  549.  
  550. End Function
  551.  
  552. Public Function fFileDialogSavePDFname() As String
  553. ' Calls the API File Open Dialog Window
  554. ' Returns full path to existing Snapshot File
  555.  
  556. On Error GoTo Err_fFileDialog
  557.  
  558. ' Call the File Common Dialog Window
  559. Dim clsDialog As Object
  560. Dim strTemp As String
  561. Dim strFname As String
  562.  
  563. Set clsDialog = New clsCommonDialog
  564.  
  565. ' Fill in our structure
  566. ' I'll leave in how to select Gif and Jpeg to
  567. ' show you how to build the Filter in case you want
  568. ' to use this code in another project.
  569. clsDialog.Filter = "PDF (*.PDF)" & chr$(0) & "*.PDF" & chr$(0)
  570. 'clsDialog.Filter = "ALL (*.*)" & Chr$(0) & "*.*" & Chr$(0)
  571. clsDialog.hDC = 0
  572. clsDialog.MaxFileSize = 256
  573. clsDialog.Max = 256
  574. clsDialog.FileTitle = vbNullString
  575. clsDialog.DialogTitle = "Please Select a name for the PDF File"
  576. clsDialog.InitDir = vbNullString
  577. clsDialog.DefaultExt = vbNullString
  578.  
  579. ' Display the File Dialog
  580. clsDialog.ShowOpen
  581.  
  582. ' See if user clicked Cancel or even selected
  583. ' the very same file already selected
  584. strFname = clsDialog.fileName
  585. If Len(strFname & vbNullString) = 0 Then
  586. ' Do nothing. Add your desired error logic here.
  587. End If
  588.  
  589. ' Return File Path and Name
  590. fFileDialogSavePDFname = strFname
  591.  
  592. Exit_fFileDialog:
  593.  
  594. Err.Clear
  595. Set clsDialog = Nothing
  596. Exit Function
  597.  
  598. Err_fFileDialog:
  599. fFileDialogSavePDFname = ""
  600. MsgBox Err.Description, vbOKOnly, Err.Source & ":" & Err.Number
  601. Resume Exit_fFileDialog
  602. End Function

This second one needs to go in another module all of it's own. So another Module - New - Copy & Paste job.

Expand|Select|Wrap|Line Numbers
  1. Sub sbSendreturnform(Optional AttachmentPath)
  2.    Dim objOutlook As Outlook.Application
  3.    Dim objOutlookMsg As Outlook.MailItem
  4.    Dim objOutlookRecip As Outlook.Recipient
  5.    Dim objOutlookAttach As Outlook.attachment
  6.    On Error GoTo ErrorMsgs
  7.  
  8.    Set objOutlook = CreateObject("Outlook.Application")
  9.    Set objOutlookMsg = objOutlook.CreateItem(olMailItem)
  10.    With objOutlookMsg
  11.      Set objOutlookRecip = .Recipients.Add"EMAIL TO SEND TO"
  12.       objOutlookRecip.Type = olTo
  13.       .Subject = "YOUR SUBJECT HERE"
  14.       .Body = "YOUR EMAIL MESSAGE HERE"
  15.       .Importance = olImportanceHigh     'Sets importance to high
  16.       If Not IsMissing(AttachmentPath) Then
  17.          Set objOutlookAttach = .Attachments.Add(AttachmentPath)
  18.       End If
  19.       For Each objOutlookRecip In .Recipients
  20.          If Not objOutlookRecip.Resolve Then
  21.             objOutlookMsg.Display
  22.          End If
  23.       Next
  24.       .Display
  25.    End With
  26.    Set objOutlookMsg = Nothing
  27.    Set objOutlook = Nothing
  28.    Set objOutlookRecip = Nothing
  29.    Set objOutlookAttach = Nothing
  30.    Exit Sub
  31.  
  32. ErrorMsgs:
  33.    If Err.Number = "287" Then
  34.       MsgBox "You clicked No to the Outlook security warning. " & _
  35.       "Rerun the procedure and click Yes to access e-mail " & _
  36.       "addresses to send your message. For more information, " & _
  37.       "see the document at http://www.microsoft.com/office" & _
  38.       "/previous/outlook/downloads/security.asp. "
  39.    Else
  40.       MsgBox Err.Number & " " & Err.Description
  41.    End If
  42. End Sub
Change the stuff in capitals.


And finally this goes in the OnClick event of the command button.
Expand|Select|Wrap|Line Numbers
  1. Dim blRet As Boolean
  2. Dim fileName, Report, msg1 As String
  3. Report = "ReturnsForm"
  4. fileName = "C:\FILENAME" & Date & ".pdf"
  5.     DoCmd.OpenReport Report, acViewPreview
  6.     blRet = ConvertReportToPDF(Report, vbNullString, fileName, False, True, 1, "", "", 0, 0)
  7.     DoCmd.Close acReport, Report
  8.     sbSendreturnform fileName
Replace "FILENAME" with the name you want to save the report as. It will auto append the date to the end with the "& Date &" part.

I think that's about it. Try it out and see how it goes.
Nov 13 '08 #4

P: 8
I'm getting errors on the second module

On line "Dim objOutlook As Outlook.Application"

I get "compile error: User-defined type not defined"

and the "Set objOutlookRecip = .Recipents.Add"NAME"" is red and wont accept what i add.
Nov 13 '08 #5

P: 90
My bad. Forgot to add the reference.
In the visual basic screen go Tools --> References.
Find "Microsoft Outlook 11.0 Object Library" and tick it. Click ok and that first error will go away.

The second one:
Expand|Select|Wrap|Line Numbers
  1. Set objOutlookRecip = .Recipients.Add"NAME"
  2.       objOutlookRecip.Type = olTo
Remove both those lines and replace them with
Expand|Select|Wrap|Line Numbers
  1. .To = "your email"
See if that works
Nov 14 '08 #6

P: 3
Hi,

I wanna save MS access report to PDF file. I tried your code. I copy the 1st part of ur code to a new module and save it. I ignore the 2nd part because i do not want to email the PDF file.

For the 3rd part, i copy & paste it to a onClick command button. I did the following changes from ur coding:-

Report = "E-Invoice Report"
fileName = "C:\payroll\PDF Files" & Date & ".pdf"

I support the "Report" is the report i want to save as PDF file and
"fileName" is where i want to save the file in.

When I try to run it, i get the following error:-

Compile error:
Ambiguous name detected: ConvertReportToPDF

I'm running in Access 2003.

Any idea how can i rectify it?

Thnks a million in advance.
Jan 13 '09 #7

P: 3
I guess i figure out what it means n how to rectify.. I had another same function name and i juz need to find it n delete it.

But now after all the debugging, when i click on that button, it show me that the report is sending to "print" (saving as pdf) but after it run, my access tell me that it encounter a problem and need to closed and the PDF is also not generated. I have a few PDF Driver installed in my pc as I'm trying out way and sourcing for solution.

Any help is appreciated. Thnks in advance.

Wino
Jan 13 '09 #8

P: 90
I think your filename may be causing that.
There are a few characters that cannot be used in a filename and the slashes / and \ are among them.
You could try
Expand|Select|Wrap|Line Numbers
  1. fileName = "C:\payroll\PDF Files" & Replace(Date,"/","") & ".pdf"
That would name your file "13012009.pdf" (assuming you have the same data format as me; dd/mm/yyyy)

Let me know if that works or not =)
Jan 13 '09 #9

P: 1
Hello mandanarchi, I was hoping you could offer some advice on your code, it works fine in that it creates the pdf (first module) and then puts it in an email ready to send (second module). I've run the two modules separately.

However at some point in the first module it crashes Access and the application closes, even though its created the pdf.

Any help would be greatly appreciated
thanks
Jan 11 '10 #10

MMcCarthy
Expert Mod 10K+
P: 14,534
Hi barleymagrew

As Mandanarchi hasn't been on the site in a few months you are unlikely to get a response.

Post your question as a new thread and you can add a link to the url for this page. Explain where you code is crashing and our experts will do what they can to help.
Jan 11 '10 #11

Post your reply

Sign in to post your reply or Sign up for a free account.