Outputting reports as PDF

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • g diddy
    New Member
    • Sep 2009
    • 54

    Outputting reports as PDF

    Hi I'm relatively new to VBA and could really do with some help please!! This is going to sound really long winded i'm sorry but I hope it will paint a picture of what i'm trying to do.

    Basically here is what I want to do: I want a form (Selector) to have 4 check boxes and a Run command button. When the user clicks run another form (ReportsMenu) will appear giving various options. Importantly though, when the user clicks OK (in the ReportsMenu form) I want (depending on which check boxes are checked in the Selector form) to output the reports as pdf files. The code currently outputs the reports as snapshot or rich text format (depending on which radio button is checked in ReportsMenu) but they would prefer it if instead of this it just outputted straight to PDF when OK was clicked.

    However currently the Selector form has 5 radio buttons (one is used to select all) so the user can only select all or one of the 4 options (which is why they want it to have check boxes instead so they can pick more than one but not necessarily all (which I have changed in the Selector form)). The problem (eventually got there i'm sorry!!) is with the ReportsMenu form. The original code for the ReportsMenu is very messy and, as i'm not very familiar with VBA (nor with the logic of the person who wrote the code), i'm not sure which parts to change (to print as PDF) and what to leave as it is. (I would just start the whole thing from scratch but there is some code linked to outlook that im not sure affects anything else at all or not)

    Here is the code (it is very long I apologise):

    Code:
    Option Compare Database
    
    Function ExSnap1()
    On Error GoTo Macro1_Err
    
    Dim MyChoice As String
    Dim MyReport As String
    Dim MySchool As String
    
    If [Forms]![ReportsMenu]![ReportFrame] = 1 Then
    MyChoice = "Full Special Needs (Students and Invigilators) by Faculty"
    MyReport = "FullSpecialNeeds"
    Else
    If [Forms]![ReportsMenu]![ReportFrame] = 2 Then
    MyChoice = "FullTimetablebyFaculty"
    MyReport = "FullTimetable"
    Else
    If [Forms]![ReportsMenu]![ReportFrame] = 3 Then
    MyChoice = "StudentTimeTablesbyProgFaculty"
    MyReport = "StudentTimeTables"
    Else
    If [Forms]![ReportsMenu]![ReportFrame] = 4 Then
        If [Forms]![Selector]![chkall].Value = False Then
        Call TimetableBySchool 'individual school
        GoTo Ending
        Else 'all schools
        MyChoice = "Date Order Timetable with Locations"
        MyReport = "DateOrderTimeTables"
    End If
    Else
    If [Forms]![ReportsMenu]![ReportFrame] = 5 Then
    Call AllSnap    'all of the above
    Exit Function
    End If
    End If
    End If
    End If
    End If
    
    If [Forms]![Selector]![frmFileFormat] = 1 Then
        DoCmd.OutputTo acReport, MyChoice, "SnapshotFormat(*.snp)", "c:\" & MyReport & ".snp", False, ""
    Else
        DoCmd.OutputTo acReport, MyChoice, acFormatRTF, "c:\" & MyReport & ".rtf", False, ""
    End If
    
    
    
    If [Forms]![ReportsMenu]![ReportFrame] <> 4 Then
    MySchool = [Forms]![Selector]![School]
    
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("Select Contact, Faculty_ID from SchoolContacts where Faculty_ID = '" & MySchool & "'")
    
    rst.MoveFirst
    
    Dim myName As String
    Dim mySchoolName As String
    myName = rst.Fields(0).Value
    End If
    
    Dim oOutlook As Outlook.Application
    Dim oMessage As Outlook.MailItem
    Dim sFileNames As String
    Dim oRecip As Outlook.Recipient
    Dim oAttach As Outlook.Attachment
    
    DoCmd.Echo True, "Emailing Report"
    
    Set oOutlook = CreateObject("Outlook.Application")
    
    Set oMessage = oOutlook.CreateItem(olMailItem)
    
    With oMessage
        .ReadReceiptRequested = True
        If [Forms]![ReportsMenu]![ReportFrame] <> 4 Then
        Set oRecip = .Recipients.Add(myName)
        oRecip.TYPE = olTo
        oRecip.Resolve
        Else
        MySchool = "All Schools"
        End If
            
    If [Forms]![Selector]![frmFileFormat] = 1 Then
    
        .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Snapshot Report"
        .Body = "Find attached Snapshot Report: " & MyChoice & " for School Code: " & MySchool & vbCrLf & vbCrLf
        .Body = .Body & "If you do not have Snapshot viewer, download it from http://www.microsoft.com/downloads/details.aspx?amp;amp;displaylang=en&familyid=B73DF33F-6D74-423D-8274-8B7E6313EDFB&displaylang=en" & vbCrLf & vbCrLf
        
        Set oAttach = .Attachments.Add("c:\" & MyReport & ".snp")
      
    Else
      
        .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Report"
        .Body = "Find attached Report: " & MyChoice & " for School Code: " & MySchool & vbCrLf & vbCrLf
        
        Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
      
    End If
      
        .Save
        '.send
        
    End With
    Set oOutlook = Nothing
    Macro1_Exit:
        Exit Function
    
    Macro1_Err:
        MsgBox Error$
        Resume Macro1_Exit
    Ending:
    End Function
    
    Function TimetableBySchool()    'date order timetable for the selected school
    On Error GoTo Macro1_Err
    
    Dim MyChoice As String
    Dim MyReport As String
    Dim MySchool As String
    
    MyChoice = "Date Order Timetable with Locations by School"
    MyReport = "DateOrderTimeTablesBySchool"
    
    If [Forms]![Selector]![frmFileFormat] = 1 Then
    DoCmd.OutputTo acReport, MyChoice, "SnapshotFormat(*.snp)", "c:\" & MyReport & ".snp", False, ""
    Else
    DoCmd.OutputTo acReport, MyChoice, acFormatRTF, "c:\" & MyReport & ".rtf", False, ""
    End If
    
    MySchool = [Forms]![Selector]![School]
    
    Dim rst As Recordset
    Set rst = CurrentDb.OpenRecordset("Select Contact, Faculty_ID from SchoolContacts where Faculty_ID = '" & MySchool & "'")
    
    rst.MoveFirst
    
    Dim myName As String
    Dim mySchoolName As String
    myName = rst.Fields(0).Value
    
    Dim oOutlook As Outlook.Application
    Dim oMessage As Outlook.MailItem
    Dim sFileNames As String
    Dim oRecip As Outlook.Recipient
    Dim oAttach As Outlook.Attachment
    
    DoCmd.Echo True, "Emailing Report"
    
    Set oOutlook = CreateObject("Outlook.Application")
    
    Set oMessage = oOutlook.CreateItem(olMailItem)
    
    With oMessage
        .ReadReceiptRequested = True
    
    If [Forms]![Selector]![frmFileFormat] = 1 Then
        .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Snapshot Report"
        .Body = "Find attached Snapshot Report: " & MyChoice & " for School Code: " & MySchool & vbCrLf & vbCrLf
        .Body = .Body & "If you do not have Snapshot viewer, download it from http://www.microsoft.com/downloads/details.aspx?amp;amp;displaylang=en&familyid=B73DF33F-6D74-423D-8274-8B7E6313EDFB&displaylang=en" & vbCrLf & vbCrLf
        
        Set oAttach = .Attachments.Add("c:\" & MyReport & ".snp")
        
    Else
        .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Report"
        .Body = "Find attached Report: " & MyChoice & " for School Code: " & MySchool & vbCrLf & vbCrLf
        
        Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
        
    End If
        .Save
        '.send
        
    End With
    Set oOutlook = Nothing
    Macro1_Exit:
        Exit Function
    
    Macro1_Err:
        MsgBox Error$
        Resume Macro1_Exit
    
    End Function
    
    
    Function AllSnap()      'all of the above option
    On Error GoTo Macro1_Err
    
    Dim MyChoice As String
    Dim MyReport As String
    Dim MySchool As String
    
    MyChoice = "Full Special Needs (Students and Invigilators) by Faculty"
    MyReport = "FullSpecialNeeds"
    MyChoice1 = "FullTimetablebyFaculty"
    MyReport1 = "FullTimetableby"
    MyChoice2 = "StudentTimeTablesbyProgFaculty"
    MyReport2 = "StudentTimeTables"
    
    If [Forms]![Selector]![frmFileFormat] = 1 Then
        DoCmd.OutputTo acReport, MyChoice, "SnapshotFormat(*.snp)", "c:\" & MyReport & ".snp", False, ""
        DoCmd.OutputTo acReport, MyChoice1, "SnapshotFormat(*.snp)", "c:\" & MyReport1 & ".snp", False, ""
        DoCmd.OutputTo acReport, MyChoice2, "SnapshotFormat(*.snp)", "c:\" & MyReport2 & ".snp", False, ""
    Else
        DoCmd.OutputTo acReport, MyChoice, acFormatRTF, "c:\" & MyReport & ".rtf", False, ""
        DoCmd.OutputTo acReport, MyChoice1, acFormatRTF, "c:\" & MyReport1 & ".rtf", False, ""
        DoCmd.OutputTo acReport, MyChoice2, acFormatRTF, "c:\" & MyReport2 & ".rtf", False, ""
    End If
    
    MySchool = [Forms]![Selector]![School]
    
    Dim rst As Recordset
    
    Set rst = CurrentDb.OpenRecordset("Select Contact, Faculty_ID from SchoolContacts where Faculty_ID = '" & MySchool & "'")
    
    rst.MoveFirst
    
    Dim myName As String
    Dim mySchoolName As String
    myName = rst.Fields(0).Value
    
    Dim oOutlook As Outlook.Application
    Dim oMessage As Outlook.MailItem
    Dim sFileNames As String
    Dim oRecip As Outlook.Recipient
    Dim oAttach As Outlook.Attachment
    Dim oAttach1 As Outlook.Attachment
    Dim oAttach2 As Outlook.Attachment
    
    DoCmd.Echo True, "Emailing Report"
    
    Set oOutlook = CreateObject("Outlook.Application")
    
    Set oMessage = oOutlook.CreateItem(olMailItem)
    
    With oMessage
        .ReadReceiptRequested = True
        If [Forms]![ReportsMenu]![ReportFrame] <> 4 Then
        Set oRecip = .Recipients.Add(myName)
        Else
        Set oRecip = .Recipients.Add("rgbf1")
        End If
            oRecip.TYPE = olTo
            oRecip.Resolve
    
    If [Forms]![Selector]![frmFileFormat] = 1 Then
        .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Snapshot Report"
        .Body = "Find attached Snapshot Reports: " & MyChoice & ", " & MyChoice1 & " and " & MyChoice2 & " for School Code: " & MySchool & vbCrLf & vbCrLf
        .Body = .Body & "If you do not have Snapshot viewer, download it from http://www.microsoft.com/downloads/details.aspx?amp;amp;displaylang=en&familyid=B73DF33F-6D74-423D-8274-8B7E6313EDFB&displaylang=en" & vbCrLf & vbCrLf
        
        Set oAttach = .Attachments.Add("c:\" & MyReport & ".snp")
        Set oAttach1 = .Attachments.Add("c:\" & MyReport1 & ".snp")
        Set oAttach2 = .Attachments.Add("c:\" & MyReport2 & ".snp")
    Else
        .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Report"
        .Body = "Find attached Snapshot Reports: " & MyChoice & ", " & MyChoice1 & " and " & MyChoice2 & " for School Code: " & MySchool & vbCrLf & vbCrLf
        
        Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
        Set oAttach1 = .Attachments.Add("c:\" & MyReport1 & ".rtf")
        Set oAttach2 = .Attachments.Add("c:\" & MyReport2 & ".rtf")
    
    
    End If
        .Save
        '.send
        
    End With
    Set oOutlook = Nothing
    Macro1_Exit:
        Exit Function
    
    Macro1_Err:
        MsgBox Error$
        Resume Macro1_Exit
    
    End Function
    As you can see the code is very messy and hard to follow for a simpleton like me. If you could help me to adjust the code accordingly that would be great!

    If you need me to clarify anything else let me know

    Thankyou I really appreciate it!
  • ajalwaysus
    Recognized Expert Contributor
    • Jul 2009
    • 266

    #2
    Please look at this link about printing out to a PDF, I understand you are just learning VBA but you look like you are picking it up quickly and this should get you in the right direction.

    Lebans Report to PDF

    -AJ

    Comment

    • Megalog
      Recognized Expert Contributor
      • Sep 2007
      • 378

      #3
      If you're using Access 2007, printing to a pdf is reduced to a simple one line command:

      Code:
      DoCmd.OutputTo acReport, MyChoice, acFormatPDF, "c:\" & MyReport & ".pdf", False, ""
      Access 2007 RTM & 2007 Service Pack 1 require you have the Convert to PDF/XPS add-in installed.

      Access 2007 Service Pack 2 adds native support for the conversions.

      Now, adding this line into your routines above is the tricky part. If I have time later, and nobody else assists you, I'll revisit the code and make some suggestions. But let us know which version you and your clients are using first.

      Comment

      • g diddy
        New Member
        • Sep 2009
        • 54

        #4
        Thanks for the link ajalwaysus I will check it out now.
        If you're using Access 2007, printing to a pdf is reduced to a simple one line command:

        Expand|Select|W rap|Line Numbers DoCmd.OutputTo acReport, MyChoice, acFormatPDF, "c:\" & MyReport & ".pdf", False, ""
        Access 2007 RTM & 2007 Service Pack 1 require you have the Convert to PDF/XPS add-in installed.

        Access 2007 Service Pack 2 adds native support for the conversions.

        Now, adding this line into your routines above is the tricky part. If I have time later, and nobody else assists you, I'll revisit the code and make some suggestions. But let us know which version you and your clients are using first.
        Thank you mate. I'm using Access 2003 if that helps at all?

        Comment

        • g diddy
          New Member
          • Sep 2009
          • 54

          #5
          Anyone at all able to help me please?

          Thanks

          Comment

          • g diddy
            New Member
            • Sep 2009
            • 54

            #6
            If it helps, here are the names of the checkboxes I will be replacing the radio buttons with:
            (OLD - Radio) [Forms]![ReportsMenu]![ReportFrame] = 1
            (NEW - Check) SNInvigBySchool
            (OLD - Radio) [Forms]![ReportsMenu]![ReportFrame] = 2
            (NEW - Check) InvigTTBySchool
            (OLD - Radio) [Forms]![ReportsMenu]![ReportFrame] = 3
            (NEW - Check) StuTTBySchool
            (OLD - Radio) [Forms]![ReportsMenu]![ReportFrame] = 4
            (NEW - Check) DateOrderTimeta bles
            (OLD - Radio) [Forms]![ReportsMenu]![ReportFrame] = 5
            (NEW - Check) Select All

            Although the code is over 200 lines long in post 1 there is, im guessing by looking at the code, only about 20 lines or so that actually need changing the problem is I don't really know how to do it. Help would be greatly appreciated!!

            Comment

            • g diddy
              New Member
              • Sep 2009
              • 54

              #7
              OK I have spent all week working through the code (on my own...) and I have now sorted out the problem with the code (I think so anyways!) All I need to do now is convert it to PDF (instead of rtf) so i'l retry that link thanks AJalwaysus

              Comment

              • NeoPa
                Recognized Expert Moderator MVP
                • Oct 2006
                • 32633

                #8
                I'm sure once you reply indicating how you got on with it then AJ will respond G_Diddy.

                Comment

                • g diddy
                  New Member
                  • Sep 2009
                  • 54

                  #9
                  OK thanks NeoPa.

                  So far I have changed the code so that it now accomodates for check boxes rather than radio buttons and have also got rid of code that was redundant. The only problem i'm stuck with now is that I don't know how to change it to PDF. I have looked at that site and have found the function:

                  Code:
                  Private Sub cmdReportToPDF_Click()
                  ' Save the Report as a PDF document.
                  ' The selected report is first exported to Snapshot format.
                  ' The Snapshot file is then broken out into its
                  ' component Enhanced Metafiles(EMF), one for each page of the report.
                  ' Finally, the EMF's are converted to PDF pages within the master
                  ' PDF document.
                  
                  ' The function call is:
                  'Public Function ConvertReportToPDF( _
                  'Optional RptName As String = "", _
                  'Optional SnapshotName As String = "", _
                  'Optional OutputPDFname As String = "", _
                  'Optional ShowSaveFileDialog As Boolean = False, _
                  'Optional StartPDFViewer As Boolean = True, _
                  'Optional CompressionLevel As Long = 150, _
                  'Optional PasswordOpen As String = "", _
                  'Optional PasswordOwner As String = "", _
                  'Optional PasswordRestrictions As Long = 0, _
                  'Optional PDFNoFontEmbedding as Long = 0, _
                  'Optional PDFUnicodeFlags As Long = 0 _
                  ') As Boolean
                  
                  ' RptName is the name of a report contained within this MDB
                  ' SnapshotName is the name of an existing Snapshot file
                  ' OutputPDFname is the name you select for the output PDF file
                  ' ShowSaveFileDialog is a boolean param to specify whether or not to display
                  ' the standard windows File Dialog window to select an exisiting Snapshot file
                  ' CompressionLevel - Resolution in DPI(Dots per Inch) to apply to embedded Images
                  ' PasswordOpen - Users require to Open PDF
                  ' PasswordOwner  - Users require to modify PDF
                  ' PasswordRestrictions - Restrictions for viewing/editing/printing PDF - See modReportToPDF for comments
                  ' PDFNoFontEmbedding - Do not Embed fonts in PDF. Set to 1 to stop the
                  ' default process of embedding all fonts in the output PDF. If you are
                  ' using ONLY - any of the standard Windows fonts
                  ' using ONLY - any of the standard 14 Fonts natively supported by the PDF spec
                  'The 14 Standard Fonts
                  'All version of Adobe's Acrobat support 14 standard fonts. These fonts are always available
                  'independent whether they're embedded or not.
                  'Family name PostScript name Style
                  'Courier Courier fsNone
                  'Courier Courier-Bold fsBold
                  'Courier Courier-Oblique fsItalic
                  'Courier Courier-BoldOblique fsBold + fsItalic
                  'Helvetica Helvetica fsNone
                  'Helvetica Helvetica-Bold fsBold
                  'Helvetica Helvetica-Oblique fsItalic
                  'Helvetica Helvetica-BoldOblique fsBold + fsItalic
                  'Times Times-Roman fsNone
                  'Times Times-Bold fsBold
                  'Times Times-Italic fsItalic
                  'Times Times-BoldItalic fsBold + fsItalic
                  'Symbol Symbol fsNone, other styles are emulated only
                  'ZapfDingbats ZapfDingbats fsNone, other styles are emulated only
                  
                  ' PDFUnicodeFlags controls how each metafile text record is interpreted in terms
                  ' of Unicode and BiDi language. See modDocumentor for details.
                  '
                  ' You must pass either RptName or SnapshotName or set the ShowSaveFileDialog param to TRUE.
                  ' Any file names you pass to this function must include the full path. If you only include the
                  ' filename for the output PDF then your document will be saved to your My Documents folder.
                   
                  
                  Dim blRet As Boolean
                  ' Call our convert function
                  ' Please note the last param signals whether to perform
                  ' font embedding or not. I have turned font embedding ON for this example.
                  blRet = ConvertReportToPDF(Me.lstRptName, vbNullString, _
                  Me.lstRptName.Value & ".pdf", False, True, 150, "", "", 0, 0, 0)
                  ' To modify the above call to force the File Save Dialog to select the name and path
                  ' for the saved PDF file simply change the ShowSaveFileDialog param to TRUE.
                  
                  End Sub
                  However i'm not sure how to call it in my code. In the code below I want to replace all rtf with PDF

                  Code:
                  Option Compare Database
                  
                  Function ExSnap1()
                  On Error GoTo Macro1_Err
                  
                  Dim MyChoice As String
                  Dim MyChoiceOne As String
                  Dim MyChoiceTwo As String
                  Dim MyChoiceThree As String
                  Dim MyReport As String
                  Dim MyReportOne As String
                  Dim MyReportTwo As String
                  Dim MyReportThree As String
                  Dim MySchool As String
                  Dim Choice As Boolean
                  Choice = Nz(SNInvigBySchool, False)
                  Dim ChoiceOne As Boolean
                  ChoiceOne = Nz(InvigTTBySchool, False)
                  Dim ChoiceTwo As Boolean
                  ChoiceTwo = Nz(StuTTBySchool, False)
                  Dim ChoiceThree As Boolean
                  ChoiceThree = Nz(DateOrderTimetables, False)
                  Dim ChoiceFour As Boolean
                  ChoiceFour = Nz(Select_All, False)
                  
                  If [Forms]![ReportsMenu]![SNInvigBySchool].Value = True Then
                  Choice = True
                  MyChoice = "Full Special Needs (Students and Invigilators) by Faculty"
                  MyReport = "FullSpecialNeeds"
                  Else
                  If [Forms]![ReportsMenu]![InvigTTBySchool].Value = True Then
                  ChoiceOne = True
                  MyChoiceOne = "FullTimetablebyFaculty"
                  MyReportOne = "FullTimetable"
                  Else
                  If [Forms]![ReportsMenu]![StuTTBySchool].Value = True Then
                  ChoiceTwo = True
                  MyChoiceTwo = "StudentTimeTablesbyProgFaculty"
                  MyReportTwo = "StudentTimeTables"
                  Else
                  If [Forms]![ReportsMenu]![DateOrderTimetables].Value = True Then
                  ChoiceThree = True
                      If [Forms]![Selector]![chkall].Value = False Then
                      Call TimetableBySchool 'individual school
                      GoTo Ending
                      Else 'all schools
                      MyChoiceThree = "Date Order Timetable with Locations"
                      MyReportThree = "DateOrderTimeTables"
                  End If
                  Else
                  If [Forms]![ReportsMenu]![Select All].Value = True Then
                      ChoiceFour = True
                      MyChoice = "Full Special Needs (Students and Invigilators) by Faculty"
                      MyReport = "FullSpecialNeeds"
                      MyChoiceOne = "FullTimetablebyFaculty"
                      MyReportOne = "FullTimetable"
                      MyChoiceTwo = "StudentTimeTablesbyProgFaculty"
                      MyReportTwo = "StudentTimeTables"
                      If [Forms]![Selector]![chkall].Value = False Then
                      Call TimetableBySchool 'individual school
                      GoTo Ending
                      Else 'all schools
                      MyChoiceThree = "Date Order Timetable with Locations"
                      MyReportThree = "DateOrderTimeTables"
                  
                  Exit Function
                  End If
                  End If
                  End If
                  End If
                  End If
                  End If
                  
                  If Choice = True Then
                      DoCmd.OutputTo acReport, MyChoice, acFormatRTF, "c:\" & MyReport & ".rtf", False, ""
                  Else
                  If ChoiceOne = True Then
                      DoCmd.OutputTo acReport, MyChoiceOne, acFormatRTF, "c:\" & MyReportOne & ".rtf", False, ""
                  Else
                  If ChoiceTwo = True Then
                      DoCmd.OutputTo acReport, MyChoiceTwo, acFormatRTF, "c:\" & MyReportTwo & ".rtf", False, ""
                  Else
                  If ChoiceThree = True Then
                      DoCmd.OutputTo acReport, MyChoiceThree, acFormatRTF, "c:\" & MyReportThree & ".rtf", False, ""
                  Else
                  If ChoiceFour = True Then
                      DoCmd.OutputTo acReport, MyChoice, acFormatRTF, "c:\" & MyReport & ".rtf", False, ""
                      DoCmd.OutputTo acReport, MyChoiceOne, acFormatRTF, "c:\" & MyReportOne & ".rtf", False, ""
                      DoCmd.OutputTo acReport, MyChoiceTwo, acFormatRTF, "c:\" & MyReportTwo & ".rtf", False, ""
                      DoCmd.OutputTo acReport, MyChoiceThree, acFormatRTF, "c:\" & MyReportThree & ".rtf", False, ""
                  End If
                  End If
                  End If
                  End If
                  End If
                          
                  MySchool = [Forms]![Selector]![School]
                  
                  Dim rst As Recordset
                  Set rst = CurrentDb.OpenRecordset("Select Contact, Faculty_ID from SchoolContacts where Faculty_ID = '" & MySchool & "'")
                  
                  rst.MoveFirst
                  
                  Dim myName As String
                  Dim mySchoolName As String
                  myName = rst.Fields(0).Value
                  
                  Dim oOutlook As Outlook.Application
                  Dim oMessage As Outlook.MailItem
                  Dim sFileNames As String
                  Dim oRecip As Outlook.Recipient
                  Dim oAttach As Outlook.Attachment
                  Dim oAttach1 As Outlook.Attachment
                  Dim oAttach2 As Outlook.Attachment
                  Dim oAttach3 As Outlook.Attachment
                  
                  DoCmd.Echo True, "Emailing Report"
                  
                  Set oOutlook = CreateObject("Outlook.Application")
                  
                  Set oMessage = oOutlook.CreateItem(olMailItem)
                  
                  With oMessage
                      .ReadReceiptRequested = True
                      If [Forms]![ReportsMenu]![DateOrderTimetables] = True Then
                      MySchool = "All Schools"
                      Else
                      Set oRecip = .Recipients.Add(myName)
                      oRecip.TYPE = olTo
                      oRecip.Resolve
                      End If
                      
                      .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Report"
                      If Choice = True Then
                      .Body = "Find attached Report: " & MyChoice & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      
                      If ChoiceOne = True Then
                      .Body = "Find attached Report: " & MyChoiceOne & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      
                      If ChoiceTwo = True Then
                      .Body = "Find attached Report: " & MyChoiceTwo & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      
                      If ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                      
                      If Choice = True And ChoiceOne = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceOne & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      
                      If Choice = True And ChoiceTwo = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceTwo & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      
                      If Choice = True And ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                      
                      If ChoiceOne = True And ChoiceTwo = True Then
                      .Body = "Find attached Report: " & MyChoiceOne & ", " & MyChoiceTwo & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      
                      If ChoiceOne = True And ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoiceOne & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                      
                      If ChoiceTwo = True And ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoiceTwo & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                         
                      If Choice = True And ChoiceOne = True And ChoiceTwo = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceOne & ", " & MyChoiceTwo & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      
                      If Choice = True And ChoiceOne = True And ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceOne & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                      
                      If Choice = True And ChoiceTwo = True And ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceTwo & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                          
                      If ChoiceOne = True And ChoiceTwo = True And ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoiceOne & ", " & MyChoiceTwo & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                      
                      If Choice = True And ChoiceOne = True And ChoiceTwo = True And ChoiceThree = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceOne & ", " & MyChoiceTwo & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                      
                      If ChoiceFour = True Then
                      .Body = "Find attached Report: " & MyChoice & ", " & MyChoiceOne & ", " & MyChoiceTwo & ", " & MyChoiceThree & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      Set oAttach1 = .Attachments.Add("c:\" & MyReportOne & ".rtf")
                      Set oAttach2 = .Attachments.Add("c:\" & MyReportTwo & ".rtf")
                      Set oAttach3 = .Attachments.Add("c:\" & MyReportThree & ".rtf")
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      End If
                      
                      
                      .Save
                      '.send
                      
                  End With
                  Set oOutlook = Nothing
                  Macro1_Exit:
                      Exit Function
                  
                  Macro1_Err:
                      MsgBox Error$
                      Resume Macro1_Exit
                  Ending:
                  End Function
                  
                  Function TimetableBySchool()    'date order timetable for the selected school
                  On Error GoTo Macro1_Err
                  
                  Dim MyChoice As String
                  Dim MyReport As String
                  Dim MySchool As String
                  
                  MyChoice = "Date Order Timetable with Locations by School"
                  MyReport = "DateOrderTimeTablesBySchool"
                  
                  DoCmd.OutputTo acReport, MyChoice, acFormatRTF, "c:\" & MyReport & ".rtf", False, ""
                  
                  MySchool = [Forms]![Selector]![School]
                  
                  Dim rst As Recordset
                  Set rst = CurrentDb.OpenRecordset("Select Contact, Faculty_ID from SchoolContacts where Faculty_ID = '" & MySchool & "'")
                  
                  rst.MoveFirst
                  
                  Dim myName As String
                  Dim mySchoolName As String
                  myName = rst.Fields(0).Value
                  
                  Dim oOutlook As Outlook.Application
                  Dim oMessage As Outlook.MailItem
                  Dim sFileNames As String
                  Dim oRecip As Outlook.Recipient
                  Dim oAttach As Outlook.Attachment
                  
                  DoCmd.Echo True, "Emailing Report"
                  
                  Set oOutlook = CreateObject("Outlook.Application")
                  
                  Set oMessage = oOutlook.CreateItem(olMailItem)
                  
                  With oMessage
                      .ReadReceiptRequested = True
                      .Subject = Format(Now(), "yyyy-mm-dd") & " Exam Timetabling: Report"
                      .Body = "Find attached Report: " & MyChoice & " for School Code: " & MySchool & vbCrLf & vbCrLf
                      
                      Set oAttach = .Attachments.Add("c:\" & MyReport & ".rtf")
                      
                      .Save
                      '.send
                      
                  End With
                  Set oOutlook = Nothing
                  Macro1_Exit:
                      Exit Function
                  
                  Macro1_Err:
                      MsgBox Error$
                      Resume Macro1_Exit
                  
                  End Function
                  I really appreciate your help!
                  Last edited by g diddy; Sep 23 '09, 08:53 AM. Reason: needed to update code

                  Comment

                  • ajalwaysus
                    Recognized Expert Contributor
                    • Jul 2009
                    • 266

                    #10
                    g diddy,

                    What the Lebans code does, is that you need to open your report and then you are supposed to feed it to the Leban function from the link, it will in turn convert it to a PDF.

                    Here is a sample of what I do...

                    Code:
                    Private Sub ReportToPDF()
                    Dim blRet As Boolean
                    Dim strFullPath As String
                        
                        DoCmd.OpenReport "MY_REPORT", acViewPreview, , , acHidden
                        strFullPath = "C:\MY_REPORT.pdf"
                    ' Call our convert function
                    ' Please note the last param signals whether to perform
                    ' font embedding or not. I have turned font embedding ON for this example.
                        blRet = ConvertReportToPDF("MY_REPORT", vbNullString, _
                        strFullPath, False, False, 150, "", "", 0, 0, 0)
                    ' To modify the above call to force the File Save Dialog to select the name and path
                    ' for the saved PDF file simply change the ShowSaveFileDialog param to TRUE.
                        DoCmd.Close acDefault, "MY_REPORT", acSaveYes
                    End Sub
                    This is with the expectation that you have saved the 2 modules Leban provided in his sample DB to your DB.

                    Let me know if this makes sense,
                    AJ

                    Comment

                    • NeoPa
                      Recognized Expert Moderator MVP
                      • Oct 2006
                      • 32633

                      #11
                      Originally posted by g diddy
                      However I'm not sure how to call it in my code. In the code below I want to replace all rtf with PDF.
                      I hope you appreciate that doing that for you is not what we're about.

                      We will provide examples of what's required but we expect you to go through your own code and apply it where necessary. We don't need to see large quantities of your code in the post.

                      Comment

                      • g diddy
                        New Member
                        • Sep 2009
                        • 54

                        #12
                        Thank you for your quick response ajalwaysus I will give it a try now.

                        Comment

                        • g diddy
                          New Member
                          • Sep 2009
                          • 54

                          #13
                          you need to open your report and then you are supposed to feed it to the Leban function from the link, it will in turn convert it to a PDF.
                          I've changed the code with one check box for the time being to test it and I get the compile error: Sub or function not defined with the following highlighted (ConvertReportT oPDF).
                          Code:
                              blRet = ConvertReportToPDF("MyChoice", vbNullString, _
                              strFullPath, False, False, 150, "", "", 0, 0, 1)
                          Just wondering where was ConvertReportTo PDF defined? Or is this something that I need to change for my code?

                          Thanks

                          Best Regards

                          Comment

                          • ajalwaysus
                            Recognized Expert Contributor
                            • Jul 2009
                            • 266

                            #14
                            Did you import the "modReportToPDF " and "clsCommonDialo g" modules that were in the Leban database? Because you need this before you can run my code.

                            -AJ

                            Comment

                            • g diddy
                              New Member
                              • Sep 2009
                              • 54

                              #15
                              No I hadn't, my apologies. I have added them in and now get the error Compile Error - Exit Sub not allowed in Function or Property. Then the "Exit Sub" line is highlighted. Sorry to be a pain but I really am a novice :$ I tried removing it then I got an error saying that Macro1 wasn't there. Here is the end of the code:

                              Code:
                              Macro1_Exit:
                                  Exit Sub
                                  
                              Macro1_Err:
                                  MsgBox Error$
                                  Resume Macro1_Exit
                              Ending:
                              End Function
                              Last edited by g diddy; Sep 24 '09, 04:18 PM. Reason: Additional Info

                              Comment

                              Working...