Een rapport verzenden in PDF met invoeging van datumselectie in de titel

Status
Niet open voor verdere reacties.

eurotax

Gebruiker
Lid geworden
27 feb 2007
Berichten
25
In een applicatie wordt een pdf aangemaakt van een rapport waarin een datumselectie is doorgevoerd : van dd/mm/yyyy tot dd/mm/yyyy.

Het PDF-document heeft de naam van het rapport.
In de header van de email lukte het me de datumcriteria in te voegen.
Nu had ik graag die datumcriteria toegevoegd aan de titel van het pdf-document.
Het rapport moet na de bewerkingen wel zijn oude naam behouden.
Tot op heden gebruik ik onderstaande aangepaste code (zonder herbenoeming van de pdf).

Kan iemand me op weg helpen?


Code:
    Dim strReport As String
    Dim strDateField As String
    Dim strWhere As String
    Dim lngView As Long
    Const strcJetDate = "\#mm\/dd\/yyyy\#" 
    Const datumschrijfwijze = "dd\/mm\/yyyy\"

    strReport = "naam rapport"
    strDateField = "[Datum]" 
    lngView = acViewPreview

    'Build the filter string.
    If IsDate(Me.txtStartDate) Then
        strWhere = "(" & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate) & ")"
    End If
    If IsDate(Me.txtEndDate) Then
        If strWhere <> vbNullString Then
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "(" & strDateField & " < " & Format(Me.txtEndDate + 1, strcJetDate) & ")"
    End If
    
    'Close the report if already open: otherwise it won't filter properly.
    If CurrentProject.AllReports(strReport).IsLoaded Then
        DoCmd.Close acReport, strReport
    End If
    
    'Open the report.
    DoCmd.OpenReport strReport, lngView, , strWhere
    DoCmd.SendObject acSendReport, strReport, acFormatPDF, "x@mail.be", , , "Lijst: " & Format(Me.txtStartDate, datumschrijfwijze) & " tot " & Format(Me.txtEndDate, datumschrijfwijze), , True
 
Je gaat nogal omslachtig te werk met de string voor de pdf. Bovendien heb je de initiël constante verkeerd vertaald:
Code:
    Const strcJetDate = "\#mm\/dd\/yyyy\#" 
    Const datumschrijfwijze = "[B][COLOR=blue]\#[/COLOR][/B]dd\/mm\/yyyy\[B][COLOR=blue]#[/COLOR][/B]"
De constante stcJetDate heb je nodig omdat VBA gebruik maakt van Amerikaanse datumnotatie. Vandaar dat je bij het openen van een rapport daar een vertaalslag voor moet maken. met de constante lukt dat. Jij wilt een datum die verder niet gemanipuleerd hoeft te worden gebruiken in een bestandsnaam. Dat kan zonder converteren:

Code:
    DoCmd.SendObject acSendReport, strReport, acFormatPDF, "x@mail.be", , , "Lijst: " & Format(Me.txtStartDate, "yymmdd") & " tot " & Format(Me.txtEndDate, "yymmdd"), , True
bijvoorbeeld. Of, als je de complete datum wilt":
Code:
    DoCmd.SendObject acSendReport, strReport, acFormatPDF, "x@mail.be", , , "Lijst: " & Me.txtStartDate & " tot " & Me.txtEndDate, , True
Kortom: dingen niet moeilijker maken dan ze al zijn ;)
 
Alvast bedankt voor de tips.

Deze code geeft echter in het onderwerp/subject van de email de titel van het rapport weer samen met de datumnotatie.

Waar ik eigenlijk naar op zoek ben is het volgende :

- door deze code wordt er een pdf-bestand bijgevoegd als attachement onder de naam strReport.pdf
(in dit voorbeeld strReport = "naam rapport")

- aangezien in de huidige programmatie bij meerdere emails deze attachement steeds dezelfde naam krijgt kan je ze niet vlot opslaan in 1 folder zonder ze nog eens te herbenoemen.

- Graag had ik dat naam van dit pdf-bestand afhankelijk van de datumselectie "naam rapport van dd-mm-yyyy tot dd-mm-yyyy.pdf" werd.

Ik heb een paar pogingen ondernomen met DoCmd.Rename maar loop altijd tegen foutmeldingen aan.
 
Je verzendt een rapport, waarvan je de naam niet genereert, maar waarvan je alleen de filtering verandert. Via SendObject verstuur je vervolgens dit rapport. Daarbij is de naam van het rapport dus een constante. Klopt dit zo? En je wilt het pdf bestand een andere naam geven? Dan zul je het rapport moeten printen naar een PDF, waarbij je het datumflter dus als naam kunt meegeven.
Of je moet je rapporten steeds opslaan onder de naam met filter, mailen en dan bijvoorbeeld weer wissen. Zolang het rapport dezelfde naam blijft houden, houd je het probleem. Met Rename los je het ook niet op, omdat er weinig te renamen valt. Tenzij je het commando gebruikt om het standaardrapport te hernoemen, maar dan moet je na het verzenden de naam weer herstellen voor een volgende zending.
 
Ik heb het uiteindelijk op deze manier opgelost, (de gebruiker kan uit twee verschillende rapportlay-outs kiezen)
belangrijk was wel de Err_Handler aan te passen, aangezien Access een fout geeft als men de email in outlook sluit zonder hem te verzenden.

kort samengevat :

Code:
    Dim strReport As String
    Dim strReportSend As String
    Dim strDateField As String
    Dim strWhere As String
    Dim strCriteria As String
    Dim lngView As Long
    Const strcJetDate = "\#mm\/dd\/yyyy\#"  'Do NOT change it to match your local settings.
    
    'DO set the values in the next 3 lines.
    If Rapportsoort.Value = "1" Then
    strReport = "Standaard Rapportnaam 1"
    strDateField = "[Datum]" 
    lngView = acViewPreview 
      
    Else
    strReport = "Standaard Rapportnaam 2" 
    strDateField = "[Datum]" 
    lngView = acViewPreview 
    End If
        
    'Build the filter string.
    If IsDate(Me.txtStartDate) Then
        strWhere = "(" & strDateField & " >= " & Format(Me.txtStartDate, strcJetDate) & ")"
    End If
    If IsDate(Me.txtEndDate) Then
        If strWhere <> vbNullString Then
            strWhere = strWhere & " AND "
        End If
        strWhere = strWhere & "(" & strDateField & " < " & Format(Me.txtEndDate + 1, strcJetDate) & ")"
    End If
    
    'Selectiecriteria filename en email subject
    
    strCriteria = " " & Format(Me.txtStartDate, "yyyy-mm-dd") & " tot " & Format(Me.txtEndDate, "yyyy-mm-dd")
    
    'Close the report if already open: otherwise it won't filter properly.
    If CurrentProject.AllReports(strReport).IsLoaded Then
        DoCmd.Close acReport, strReport
    End If
    
    'Opmaken nieuwe rapportnaam     
    strReportSend = strReport & strCriteria
    
    'Herbenoemen, preview openen en verzenden van het rapport met rapportnaamvermelding in emailsubject.
    DoCmd.Rename strReportSend, acReport, strReport
    DoCmd.OpenReport strReportSend, lngView, , strWhere
    DoCmd.SendObject acSendReport, strReportSend, acFormatPDF, "x@mail.be", , , strReportSend, True
    
    'Sluiten rapport en herbenoemen naar de standaardnaam
    If CurrentProject.AllReports(strReportSend).IsLoaded Then
    DoCmd.Close acReport, strReportSend
    End If
    DoCmd.Rename strReport, acReport, strReportSend
    
    'afsluiten email-formulier
    DoCmd.Close acForm, "Rapport Keuze 2", acSaveNo
    
Exit_Handler:
    Exit Sub

Resume Exit_Handler

Err_Handler:
    If Err.Number <> 2501 Then
        MsgBox "Error " & Err.Number & ": " & Err.Description, vbExclamation, " Kan het rapport niet verzenden "
    If CurrentProject.AllReports(strReportSend).IsLoaded Then
    DoCmd.Close acReport, strReportSend
    DoCmd.Rename strReport, acReport, strReportSend
    End If
    End If
    
    If Err.Number = 2501 Then
    DoCmd.Close acForm, "Rapport Keuze 2", acSaveNo
    If CurrentProject.AllReports(strReportSend).IsLoaded Then
    DoCmd.Close acReport, strReportSend
    DoCmd.Rename strReport, acReport, strReportSend
    End If
    End If
    Resume Exit_Handler
End Sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan