Rapport zenden per mail / veld in bijschrift rapport

Status
Niet open voor verdere reacties.

GerbenDenker

Gebruiker
Lid geworden
29 mrt 2013
Berichten
74
Hallo,

Ik maak een rekening op en stuur deze gelijk via de mail naar betrokkene.

De code is aldus:

Code:
DoCmd.OpenReport "Rekening (nieuw lid)", acViewPreview, , "Notanr=" & Me.Notanr, acHidden
DoCmd.SendObject acSendReport, "Rekening (nieuw lid)", acFormatPDF, Me.Email, , , "Lidmaatschap " & Me.Betrokkene, "Goedendag," & vbCrLf & " " & vbCrLf & "In de bijlage enz enz...." ,True

Dit werkt...
Nu wordt de bijlage - dat is dus de pdf - genoemd naar datgene wat als bijschrift in het rapport staat.
Op zich vindt ik dat prima - het bijschrift is "Lidmaatschap nieuw lid".
Is het mogelijk om in het bijschrift ook een veld op te nemen, bijvoorbeeld de naam van het nieuwe lid, zodat ik dan als pdf-naam te zien krijg: "Lidmaatschap Jantje De Vries" ?
 
Die vraag is onlangs ook langs gekomen, en daar heb ik een code voor gemaakt. Die vind je in dit draadje. Volgens mij kun je daar wel mee uit de voeten. Die had je overigens zelf ook kunnen vinden :).
 
Hallo,

Het draadje had ik al bekeken, maar dat gaat m'n pet echt te boven.
?ik had het al geprobeerd, maar dat lukte me niet. Vreselijk moeilijk allemaal.
Is er geen andere oplossing mogelijk ?
 
Nope. Als je een rapport verzend, heb je een rapportnaam nodig. Het enige dat ik in de andere draad doe is de originele naam van het rapport opslaan in een variabele, vervolgens met DoCmd.Rename het rapport hernoemen, vervolgens rapport openen met het filter, verzenden en weer terug hernoemen naar de oorspronkelijke naam. In essentie dus exact hetzelfde wat jij ook doet. Moet je toch uit kunnen komen :)
 
Om te laten zien hoe simpel het is om te bouwen, hier de oplossing voor jou:
Code:
Private Sub cmdVerzenden_Click()
Dim sNaam_Ori As String, sNieuw As String
Dim strWhere As String

    On Error GoTo errHandler
    'namen vastleggen en rapport hernoemen
    sNaam_Ori = "Rekening (nieuw lid)"
    sNieuw = "Rekening " & Me.Betrokkene
    DoCmd.Rename sNieuw, acReport, sNaam_Ori
    strWhere = "Notanr=" & Me.Notanr
    'rapport hernoemen naar oorspronkelijke naam
    DoCmd.OpenReport sNieuw, acPreview, "", strWhere, acHidden
    DoCmd.SendObject acSendReport, sNieuw, acFormatPDF, Me.Email, , , "Lidmaatschap " _
        & Me.Betrokkene, "Goedendag," & vbCrLf & " " & vbCrLf & "In de bijlage enz enz....", True
    'rapport hernoemen naar oorspronkelijke naam
    DoCmd.Close acReport, sNieuw
    DoCmd.Rename sNaam_Ori, acReport, sNieuw
    Exit Sub
    
errHandler:
    If Err.Number = 2501 Then MsgBox "Er ging iets fout..."
    DoCmd.Close acReport, sNieuw

End Sub
 
Dankje voor de hulp.
Maar ik krijg het niet voor elkaar.
Als ik deze code onder een knop zet, wordt het document wel hernoemd, maar niet inde mail gezet en de mail wordt ook niet aangemaakt.
Zit er in je code een fout, of komt het doordat het rapport op een aparte manier wordt samengesteld ?

Het document (rapport) wordt vanuit een deels ingevuld formulier gemaakt, aangevuld met gegevens uit verschillen tabellen/query's).

De code die ik daarvoor gebruik:

Code:
Private Sub Knop239_Click()
On Error GoTo Err_Knop239_Click

    Dim folder As String
    Dim strDocName As String
    Dim strWhere As String

On Error GoTo Opslaan_cmdReportOpslaan
folder = "D:\"

MkDir folder
    Resume Opslaan_cmdReportOpslaan

Opslaan_cmdReportOpslaan:
    strDocName = "Rekening (nieuw lid)"
    strWhere = "[Notanr]='" & Me!Notanr & "'"
    DoCmd.OpenReport strDocName, acPreview, "", strWhere, acHidden
    DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, folder & Me!Notanr & ".pdf"
    

    DoCmd.OpenReport "Rekening (nieuw lid)", acViewPreview, , "Notanr=" & Me.Notanr, acHidden
    DoCmd.SendObject acSendReport, "Rekening (nieuw lid)", acFormatPDF, Me.Email, , , "Lidmaatschap " & Me.Betrokkene, "Goedendag," & vbCrLf & " " & vbCrLf & "In de bijlage treft u aan: enz.enz.", True



DoCmd.Close acReport, "Rekening (nieuw lid)"

errExit:
    Exit Sub
    
errHandler:
    If Err.Number = 2501 Then
        'Email was cancelled
    End If
    Resume errExit
    



Exit_Knop239_Click:
    Exit Sub

Err_Knop239_Click:
    MsgBox Err.Description
    Resume Exit_Knop239_Click
    
End Sub

Vraag:
Hoe kan het hernoemen wel goed plaatsvinden ?
Kan je de code ertussen zetten ?
 
je kan ook in het rapport (bij laden) deze code plaatsen
Code:
Reports "Rekening (nieuw lid)".Caption = "Rekening " & Me.Betrokkene

en deze code
Code:
Private Sub PrintToPDF_Click()

On Error GoTo errHandler

DoCmd.OpenReport "Rekening (nieuw lid)", acViewReport, , "[Notanr]=" & Notanr
DoCmd.SendObject acSendReport, "rptReportcaption", acFormatPDF, E_Mail, , _
        , "Contractnr " & Me.ContractID, "de Rekening" & Me.Notanr & " is bijgevoegd.", True
DoCmd.Close acReport, "Rekening (nieuw lid)"

    
errHandler:
    If Err.Number = 2501 Then MsgBox "Er ging iets fout..."
    DoCmd.Close acReport,"Rekening (nieuw lid)"
End Sub
 

Bijlagen

  • reportcaption.jpg
    reportcaption.jpg
    95,9 KB · Weergaven: 70
Laatst bewerkt:
Hoi, lukt nog niet; krijg het niet voor elkaar.
De code van Rene die in het rapport moet staan, werkt niet.
Komt de foutmelding dat er een syntaxfout is.

De oplossing van Octafish werkt ook niet; het bestand wordt niet hernoemd en het email gedeelte doet niets (geen email openen, etc.)
Feitelijk gebeurt er niets... die code is fout volgens mij...

Dus ben ik terug bij af.

Met de volgende code maak ik het rapport aan, wordt deze opgeslagen als pdf op de harde schijf.
Het opmaken en opslaan lukt, eveneens in de mail zetten.

Dus alles gaat goed, alleen wil ik het bestand dat in de mail komt, hernoemd hebben.
En wel de tekst "Rekening voor: ", samen met het veld Betrokkene.

Wie kan dit dus in de code zetten ?

Code:
Private Sub Knop239_Click()
On Error GoTo Err_Knop239_Click

    Dim folder As String
    Dim strDocName As String
    Dim strWhere As String

On Error GoTo Opslaan_cmdReportOpslaan
folder = "D:\"

MkDir folder
    Resume Opslaan_cmdReportOpslaan

Opslaan_cmdReportOpslaan:
    strDocName = "Rekening (nieuw lid)"
    strWhere = "[Notanr]='" & Me!Notanr & "'"
    DoCmd.OpenReport strDocName, acPreview, "", strWhere, acHidden
    DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, folder & Me!Notanr & ".pdf"
    

    DoCmd.OpenReport "Rekening (nieuw lid)", acViewPreview, , "Notanr=" & Me.Notanr, acHidden
    DoCmd.SendObject acSendReport, "Rekening (nieuw lid)", acFormatPDF, Me.Email, , , "Lidmaatschap " & Me.Betrokkene, "Goedendag," & vbCrLf & " " & vbCrLf & "In de bijlage treft u aan: enz enz" &, True



DoCmd.Close acReport, "Rekening (nieuw lid)"

errExit:
    Exit Sub
    
errHandler:
    If Err.Number = 2501 Then
        'Email was cancelled
    End If
    Resume errExit
    



Exit_Knop239_Click:
    Exit Sub

Err_Knop239_Click:
    MsgBox Err.Description
    Resume Exit_Knop239_Click
    
End Sub
 
Laatst bewerkt:
de oplossing van Octafish werkt goed
daarmee is het mij ook gelukt
je moet alleen in je rapport, eigenschappen bij tabje opmaak de bijschrift weghalen
 
Rene71, Ok, bedankt voor het meedenken.
Maar het werkt niet, ook als het bijschrift weg is.
Zowel jouw code als die van Octafish werken niet in mijn geval.
De base is te groot om als upload beschikbaar te stellen.

Ik heb wel de volgende werkende code gemaakt, maar nu lukt het me nog niet om het bestand op te slaan.

Code:
    Dim sExistingReportName As String
    Dim sAttachmentName As String
 
    'Input variabelen
     sExistingReportName = "Rekening (nieuw lid)"   'Naam van het Access-rapport dat verstuurd wordt
     sAttachmentName = "Deze-naam-wil-ik-geven"     'Naam om te worden gebruikt voor de bevestiging in de e-mail
 
    'De code om het te laten gebeuren
     DoCmd.OpenReport sExistingReportName, acViewPreview, , , acHidden
     Reports(sExistingReportName).Caption = sAttachmentName      'veranderen van het bijschrift van het rapport
                                                         
     DoCmd.SendObject acSendReport, sExistingReportName, acFormatPDF, "Me.email", _
                     , , "Onderwerp..", "E-mail Body tekst...."
                     

End Sub

Met deze code wordt alles wederom netjes weggezonden, maar wie kan de code erin zetten zodat de bestandsnaam van het veld Notanr. wordt opgeslagen op een bepaalde plek, in dit geval D:\
 
Laatst bewerkt:
OK, bedankt voor de codes.
Zelf heb ik het aldus opgelost....

Code:
Dim folder As String
Dim strDocName As String
Dim strWhere As String

On Error GoTo Opslaan_cmdReportOpslaan
folder = CurrentProject.Path & "\Facturen\"
MkDir folder
    Resume Opslaan_cmdReportOpslaan

Opslaan_cmdReportOpslaan:
    strDocName = "Rekening (nieuw lid)"
    strWhere = "[Notanr]='" & Me!Notanr & "'"
    DoCmd.OpenReport strDocName, acPreview, "", strWhere, acHidden
    DoCmd.OutputTo acOutputReport, strDocName, acFormatPDF, folder & Me!Notanr & ".pdf"
    
    
    
    Dim sExistingReportName As String
    Dim sAttachmentName As String
 
    'Input variabelen
     sExistingReportName = "Rekening (nieuw lid)"   'Naam van het Access-rapport dat verstuurd wordt
     sAttachmentName = "Deze-naam-wil-ik-geven"     'Naam om te worden gebruikt voor de bevestiging in de e-mail
 
    'De code om het te laten gebeuren
     DoCmd.OpenReport sExistingReportName, acViewPreview, , , acHidden
     Reports(sExistingReportName).Caption = sAttachmentName      'veranderen van het bijschrift van het rapport
                                                         
     DoCmd.SendObject acSendReport, sExistingReportName, acFormatPDF, "jandegroot@one.nl", _
                     , , "Onderwerp..", "E-mail Body tekst...."


Dit werkt.
Misschien is code niet fraai, maar voor mij al heel wat.
 
Toch nog iets niet goed...

Met behulp van de code (hierboven), werkt alles wel.
Echter verschijnt er in de mail in het adresvak, het volgende email-adres..

janbos@ziggo.nl#mailto:janbos@ziggo.nl#

Het veld waaruit het email adres komt, komt van een tabel, waarvan de eigenschap een hyperlink is.
Als ik die verander in een tekstveld, treedt hetzelfde probleem op.

Door de toevoeging #mailto:janbos@ziggo.nl#, wordt de mail niet verzonden; dat moet ik eerst weghalen, waarna de mail verzonden wordt.
Mailadres was nl wel juist.
Hoe moet ik het zo veranderen dat alleen in het van Aan, alleen komt te staan janbos@ziggo.nl

Wie weet het ?
 
Laatst bewerkt:
Sowieso never nooit niet een hyperlinkveld gebruiken, want dat is doorgaans volkomen onbruikbaar. Dus voor je email een normaal tekstveld. Wellicht moet je de inhoud dan nog vervangen, maar dat kun je met een bijwerkquery wel doen.
 
Dankje Octafish, dit onthoud ik.

Maar zoals ik al schreef, werkt het ook niet als het mailadres een tekstveld is.
Hoe ik het met een bijwerkquery zou moeten bijwerken, is mij een raadsel..

Van het mailadres: janbos@ziggo.nl#mailto:janbos@ziggo.nl# moet het gedeelte #mailto:janbos@ziggo.nl# verdwijnen.
Hoe zou jij dat doen ?
 
Dat kun je dus met een bijwerkquery wel doen. Ik zou dan wel eerst een tijdelijk veld maken, zodat je niet gelijk het email veld verbouwt, dit voor het geval er iets fout gaat.
Bij een bijwerkquery waarin je een tekstveld wilt aanpassen, zoals jij wilt doen, moet je op zoek naar een overeenkomende factor in de tekststring. Die is simpel: de tekst 'mailto'. Alles rechts ervan, en uiteraard de tekst mailto zelf, moet er uit. Punt is natuurlijk dat je nooit kunt zeggen waar mailto staat, omdat de tekst links ervan steeds een verschillende lengte heeft. Maar dat is niet zo moeilijk, want de startpositie van mailto kun je met de functie Instr makkelijk vinden. En met Left pak je dan het linker deel van de string tot de positie die je met Instr vindt. Iets als:
Code:
Left([Email];InStr(1;[Email];"#mailto")-1)

Instr levert de positie van de eerste zoekletter(s) op, dus de plek waar de '#' staat.
Je moet dus één positie naar links om dat teken zelf uit de tekst te filteren.
 
Ok, bedankt, heb het opgelost.
Vriendelijk dank voor de hulp.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan