Access 2016. Email met pdf bijlage van een formulier met gegevens spefieke record.

Status
Niet open voor verdere reacties.

KPTPTT

Gebruiker
Lid geworden
2 mrt 2018
Berichten
321
Hallo. Ik loop bij het laatste loodje van mijn project vast. Ik wil een email met een pdf bijlage verzenden. De bijlage is een formulier met een geselecteerde Werkorder. Ik heb een tabel Opdrachten waarvan ik het invulformulier Werkorders heb gemaakt. Ik kan in het formulier (vorige en volgende) bladeren door de "Records" (ID: o_Werknummer) en daarmee het specifieke formulier selecteren. Dit werkt goed. Ik wil mbv. een knop met onderliggende macrocode de Email verzenden, echter voorziet de macro-opdracht DatabaseVerzendenViaEmail niet de gewenste mogelijkheden. Als ik deze macro gebruik, dan worden alle formulieren van alle werkorders overeenkomstig alle records van de tabel als pdf bijlage toegevoegd ipv. van alleen het geselecteerde formulier.

Als oplossing dacht ik het principe van mijn succesvolle macro voor het printen toe te passen, die de mogelijkheid biedt een specifiek geselecteerd formulier af te drukken. Hiervoor heb ik het formulier Werkorders als een Object c.q. Rapport opgeslagen, en zo een rapport 'Rapport Werkorders', inhoudelijk met de layout van het formulier, gemaakt. Met de volgende macro kan ik het formulier afdrukken waarvan de gegevens van één specifiek record zijn ingevuld.

TijdelijkeVariabeleInstellen
Naam: TempRapportWerkorders
Expressie: = o_Werknummer
RapportOpenen
Rapportnaam: Rapport Werkorders
Beeld: Afdrukken
Filternaam:
WHERE voorwaarde = [o_Werknummer]=[TempVars]![TempRapportWerkorders]
Venstermodus: Standaard

Hiermee selecteer ik één formulier met de gegevens van één specifieke record. Precies de functie die ik ook voor de verzending via Email nodig heb.
Ipv. afdrukken zou deze selectie in een pdf bestand geplaatst moeten worden en via email moeten worden verzonden.
Ik weet niet hoe dat zou moeten en ik deze macro mogelijk zou kunnen combineren met de macro DatabaseVerzendenViaEmail (via Outlook) of een andere macro.

Een oplossing in programmacode is vanwege mijn kennis niet wenselijk. Een oplossing met een macro zou ik toejuichen.
Wie wil en kan mij helpen, alvast bedankt.
 
Zodra je bereid bent een oplossing met VBA (dus programmeren) te accepteren, kan ik je helpen. Alleen al het lezen van de macro bezorgt mij hoofdpijn :)
 
Access 2016. Email met pdf bijlage van een formulier met gegevens spefieke record

OctaFish, bedankt voor je reactie. Ik wil graag de uitdaging aangaan. Met Googlen ben ik er achter gekomen dat VBA de juiste weg is. Ik ben benieuwd.
 
Access 2016. Email met pdf bijlage van een formulier met gegevens spefieke record

Hallo OctaFish. Ik heb heel wat geprobeerd in VBA en begrijp de intentie van de instructies echter er blijven maar foutmeldingen komen en krijg het niet aan de praat.
Ik heb in Access 2016 tot beschikking: Tabel "Werkorders": Key "o_Opdrachtnummer" - Formulier "Werkorder" (afgeleid van de tabel) - Formulier "Werkorder" is opgeslagen als object Rapport,
naam "Rport Werkorders", "o_Opdracht ID". (De inhoud van het object rapport "Rport werkorders" heeft de layout van het formulier)
Ik wil graag een email met bijlage pdf verzenden met het formulier (overdruk uit het formulier Werkorder of vanuit object rapport "Rport Werkorders") met de gegevens van het geselecteerde record in het formulier. Het formulier heeft een knop, nummer 802.

Private Sub Knop802_Click()
Me.Filter = "o_Opdracht ID=" & Reports![Rport Werkorders]![o_Opdracht ID] (foutmelding 2451 Verwijzing dat een rapport niet is geopend))
Me.FilterOn = True
End Sub

Private Sub Naam_Click()
On Error GoTo Err_Naam_Click
DoCmd.SendObject acSendReport, "Rport Werkorders", acFormatPDF, , , , [Werkorder]
Exit_Naam_Click:
Exit Sub
Err_Naam_Click:
MsgBox Err.Description
Resume Exit_Naam_Click
End Sub

Er mist ook nog de foutafhandeling, ook dat is nog onbekend.

Ik zou graag hulp met een oplossing ontvangen. Alvast bedankt.
 
Je eerste probleem, met de knop, is logisch. Als je vanuit een formulier een rapport opent, kun je dat rapport openen met een filter, zodat je het actuele record in het rapport ziet. Dat doe je dan dus precies omgekeerd van wat jij doet:
Code:
    DoCmd.OpenReport strNaam, acViewPreview, , "o_Opdracht ID=" & Me.o_Opdracht ID
De code die jij gebruikt maakt een filter op het formulier. Een filter bestaat uit twee componenten, aan beide kanten van het = teken één. Links het veld dat je gebruikt voor het filter, rechts de waarde die het veld moet hebben. Jij haalt die waarde uit een rapport, maar dat heeft a) totaal geen zin want het moet precies andersom, en b) is het rapport dus nog niet geopend.
Een rapport in Preview modus met filter kun je vervolgens wel mailen zonder problemen, Maar jouw code, met SendObject, verstuurt altijd het complete rapport, filter of niet. Dus dat gaat ook niet echt werken. Daarvoor zul je ofwel handmatig het rapport vanuit de preview kunnen versturen, ofwel een andere techniek gebruiken. De code daarvoor heb ik al regelmatig in dit forum gepost, dus daarvoor hoef je niet heel ver te googelen :). En anders post ik hem vanavond nog een keer.
 
Dank voor je snelle reactie. Het duizelt mij allemaal. Ik heb zeer veel berichten op internet gelezen voor info en allemaal doen ze wat anders. Wat ik verkeerd en andersom doe bv. filteren in het formulier begrijp ik niet, ik dacht dat ik filter op het Rapport. Ik heb jouw instructie toegepast maar krijg syntax errors. Ik heb verschillende syntax mogelijkheden geprobeerd maar het blijft een probleem. Ik heb dit aangepast. Volgens de syntax moet er voor "Rport Werkorders" en aan het einde haakjes staan. Is dat juist?
Private Sub Knop802_Click()
DoCmd.OpenReport(Rport Werkorders, acViewPreview, , "o_Opdracht ID=" & Me.o_Opdracht ID)
Me.FilterOn = True
End Sub.
Kan het gefilterde rapport zonder preview als bijlage worden gemaild? Ik heb immers al het formulier openstaan.

Ik heb in Helpmij nog gezocht op het rapport in Preview modus met filter verzenden heb ik niet gevonden.
Ik kom er niet meer uit en weet na veel proberen niet meer wat te doen. Ieder punt en komma etc. geeft een fout. Zou je mij svp. verder willen helpen met bv. code voor filteren en verzenden. Ik zou het zeer op prijs stellen en dank je bijvoorbaat.
 
Hallo, zie svp. ook mijn vorige reactie.
ik heb inmiddels het openen van het rapport draaien.

Private Sub Knop802_Click()
DoCmd.OpenReport "Rport Werkorders", acViewPreview, , "[o_Opdracht ID]= " & Me.[o_Opdracht ID]
Me.FilterOn = True
End Sub

Het feit is nu, dat wanneer ik in het openstaande formulier de knop met de onderliggende code activeer, het rapport met de betreffende ID gegevens opent, echter, bij het sluiten van het rapport zijn alle gegevens in het nog openstaande formulier verdwenen en is het formulier niet meer bruikbaar en moet ik het formulier sluiten en weer openen. Hoe los ik dit op?

Hoe kan ik het geopende rapport in een pdf bestand stoppen en vervolgens emailen?
Moet per sé het rapport middels preview zichtbaar zijn (extra handeling om weer te moeten sluiten etc.) en kan het niet achter de schermen in een pdf worden geplaatst.
Is er nog foutafhandeling nodig, hoe?
Ik zou het zeer op prijs stellen als je wat code zou willen aanreiken. Alvast bedankt.
 
Je gebruikt een overbodige regel (Me.FilterOn = True) die in jouw code nergens op slaat, want er ís geen filter. Dus wordt het filter vermoed ik vervangen door de complete recordset. Niet dat deze opdracht dat zou moeten doen, maar zoals ik al zei: zoals het er nu staat, is het een beetje onzin.

Ik heb vandaag weinig tijd, maar ik zal van het weekend een voorbeeldje van werkende code maken. In het kort mijn werkwijze: Ik baseer al mijn rapporten op een dynamische query. Dat is in essentie gewoon een query, maar deze query krijgt elke keer als ik hem nodig heb een andere SQL code. Dus de ene keer draait hij op rapport A op basis van tabel A,en de volgende keer op rapport B van tabel B+C. Dat aanpassen doe ik via de QueryDefs collectie. Ik maak dus een query statement (SELECT ... FROM WHERE ...) waar dus een filter in zit. Vervolgens wijs ik die SQL toe aan de variabele query. Die query dient dus als vaste bron voor het rapport. Omdat er nu een harde filtering in staat, kan het rapport ook alleen maar de gefilterde query laten zien. En dán gaat SendObject dus wél werken, want dan is de export datgene wat je hebt gefilterd.
 
Heel fijn, dank je wel. Ik ben benieuwd. Ik probeer ook wat te "sleutelen". Ik heb wel gemerkt dat, na het sluiten van het geopende rapport, het reeds openstaande formulier met knop, leeg is en niet meer reageert op de vorige en volgende record knop op het formulier. Ik kan wel het formulier invullen waarmee ik concludeer dat het een nieuwe (laatste) record betreft. Alleen is deze niet meer te veranderen. Moet ik niet het ID nummer na het openen van het rapport weer naar de uitgangstoestand herstellen?
 
De overbodige regel is de boosdoener. Deze regel verwijderd en het formulier met allee knoppen werkt weer. Het rapport wordt geopend, kan ik dit getoonde rapport niet in een pdf vatten en verzenden?
 
Ja, handmatig. Of dus met de techniek die ik eerder beschreef en waarvoor de code ook wel in dit forum te vinden is, want jouw vraag komt best wel vaak voorbij. Zoek in het Access forum op ‘QueryDefs’ en je vindt al wel een voorbeeldje.
 
Goedemorgen en dank voor je antwoord in de late uurtjes. De code werkt overeenkomstig mijn wens. Juiste rapport wordt gefilterd, preview wordt geopend. Rapport wordt als pdf toegevoegd aan Outlook, bijlage wordt verzonden en preview wordt automatisch gesloten. Het formulier is nog intact.
Er is echter sprake van een syntaxfout als de email niet wordt verzonden en Outlook wordt afgesloten, fout 2501. De actie Sendobject is geannuleerd. De gehele regel DoCmd.SendObject acSendReport wordt geel gemarkeerd.
Hoe kan ik de syntaxfout oplossen?
Hoe moet de foutafhandeling?
Het pdf bestand heeft de naam “Werkorder” (Hoe is dat toegewezen?).
Hoe zou ik de pdf naam kunnen aanvullen met de actuele (o_Opdracht) ID? het wordt dan bv. Werkorder 24.

Private Sub Knop802_Click()
DoCmd.OpenReport "Rport Werkorders", acViewPreview, , "[o_Opdracht ID]= " & Me.[o_Opdracht ID]
DoCmd.SendObject acSendReport, "Rport Werkorders", acFormatPDF, , , , "Nieuwe Werkorder", "Beste ,"
DoCmd.Close acReport, "Rport Werkorders", acSaveNo
Exit_Naam_Click:
Exit Sub
Err_Naam_Click:
MsgBox Err.Description
Resume Exit_Naam_Click
End Sub

Zou je er svp nog eens naar willen kijken, alvast bedankt.
 
Ik heb de volgende code geschreven. De verzending via outlook van de email met bijlage verloopt perfect. De foutafhandeling is nu aangebracht.
Code:
Private Sub Knop802_Click()
On Error GoTo ErrorHandler
  Me.Dirty = False
DoCmd.OpenReport "Rport Werkorders", acViewPreview, , "[o_Opdracht ID]= " & Me.[o_Opdracht ID]
DoCmd.SendObject acSendReport, "Rport Werkorders", acFormatPDF, , , , "Werkorder", "Wo ,"
DoCmd.Close acReport, "Rport Werkorders", acSaveNo
Exit_Naam_Click:
MsgBox "De Werkorder is met succes verzonden."
Cleanup:
    Exit Sub
ErrorHandler:
  Select Case Err.Number
    Case 2501
      MsgBox "Email-bericht is geannuleerd."
    Case Else
      MsgBox Err.Number & ": " & Err.Description
  End Select
  Resume Cleanup
End Sub
Het pdf bestand heeft de naam “Werkorder” (Hoe is dat in de code toegewezen?).
Hoe zou ik de pdf bestandsnaam Werkorder kunnen aanvullen met de actuele (o_Opdracht) ID? Het wordt dan bv. Werkorder 24.
Hoe zou ik de naam in het Onderwerp van de email kunnen aanpassen met de toevoeging "o_opdracht ID?
Graag een suggestie.
 
Laatst bewerkt:
Zou je de code eens op kunnen maken met de CODE knop (#)? Hoe meer code, hoe onleesbaarder.
 
Kijk eens naar mijn code in bericht #5, en vergelijk die eens met de jouwe. Je hebt in de menubalk een aantal knoppen, die je blijkbaar nog niet fanatiek gebruikt :). Eén daarvan is de knop CODE (knop met #) en die moet je gebruiken als je code plaatst; dan wordt de inspringing netjes meegenomen, en het lettertype is een stuk leesbaarder. Je kan je oude berichten bewerken, dan de code selecteren en op die knop klikken.
 
Dank, klopt, het ziet in de tekst er niet uit. Is aangepast.
Ik zou nog graag hulp voor het laatste willen hebben. Zie mijn vorige bericht #13.
Het pdf bestand heeft de naam “Werkorder” (Hoe is dat in de code toegewezen?).
Hoe zou ik de pdf bestandsnaam Werkorder kunnen aanvullen met de actuele (o_Opdracht) ID? Het wordt dan bv. Werkorder 24.
Hoe zou ik de naam in het Onderwerp van de email kunnen aanpassen met de toevoeging "o_opdracht ID"?
 
Is de naam "Werkorder" op het tabblad te zien als je het rapport opent?
 
Ja. Mysterie opgelost. Hoe zou ik het volgende nog kunnen doen?
Hoe zou ik de pdf bestandsnaam Werkorder kunnen aanvullen met de actuele (o_Opdracht) ID? Het wordt dan bv. Werkorder 24.
Hoe zou ik de naam in het Onderwerp van de email kunnen aanpassen met de toevoeging "o_opdracht ID"?
 
De naam wordt opgeslagen in de eigenschap <Bijschrijft> van het rapport, zoals je nu weet. Als je eerst dat bijschrijft aanpast met je code, en dan exporteert, heb je een dynamische naam. Na het verzenden zet je dan de oorspronkelijke naam weer terug.
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan