mailen in access 2010

Status
Niet open voor verdere reacties.

jan62

Gebruiker
Lid geworden
19 jan 2010
Berichten
36
hoi ,
ik heb op een formulier en knop staan waar ik met 1 klik de betreffende factuur wil printen, opslaan als pdf , en verzenden naar en vast email adres.
Ik heb ondertussen iets gevonden en hier en daar aangepast, maar ben nog niet tevreden.
Ben al een tijdje bezig en mijn kennis van VBA is beperkt en hoop dat iemand me kan helpen met het laatste stukje.
Hij print de factuur en slaat de factuur op met Id nr en datum. opzich is dit oke.
maar als ik ga mailen is de bijlage naam Factuur21%.pdf. hier moet Id nr en de naam van de persoon voor komen. ( dus bijv: 33.ikke.pdf).
Hoop dat iemand me kan helpen

bij voorbaat mijn dank daarvoor,

Jan



Code:
Private Sub Knop61_Click()
On Error GoTo Err_Knop61_Click

    Dim stDocName As String
    DoCmd.RunMacro ("vernieuwen")

    stDocName = "factuur21%"
    Linkcriteria = "[Id] = Forms![factuur]![Id]"
    
   DoCmd.OpenReport stDocName, acNormal, , Linkcriteria
   DoCmd.OpenReport "Factuur21%", acViewPreview, , "Id=" & Me.Id, acHidden, sFilter
   
   DoCmd.OutputTo acOutputReport, "factuur21%", acFormatPDF, "h:\facturen\" & CStr(Id) & "-" & Date & ".PDF"
   
   DoCmd.SendObject acSendReport, stDocName, acFormatPDF, "xxxxx@xxxx.nl", , , "Factuur. ", "  Hoi hoi,  " & Chr(13) & _
        " Bijgesloten vindt u de factuur van  " & Chr(13) & Me.naam & Chr(13) & Me.datum & Chr(13) & _
        " Vriendelijke groet ikke", , True
  
   DoCmd.SetWarnings False
   DoCmd.SetWarnings True
   DoCmd.Close acReport, "factuur21%"

Exit_Knop61_Click:
    Exit Sub

Err_Knop61_Click:
    MsgBox Err.Description
    Resume Exit_Knop61_Click
End Sub
 
Je doet rare dingen in je code, zoals twee keer achter elkaar hetzelfde rapport openen. Verder zit er een m.i. overbodige macro in (DoCmd.RunMacro ("vernieuwen") en is het probleem met de naam van je rapportnaam in de mail ook volslagen verklaarbaar, omdat je nu eenmaal een rapport mailt met de (erg onhandige, want met % teken) naam "Factuur21%"). En SendObject kan nu eenmaal alleen objecten versturen die in de database staan, en dus een specifieke naam hebben. De oplossing is dan ook: hernoem het rapport tijdelijk, stuur hem dan met de mail en zet de oude naam weer terug. Of, netter vind ik, open een Outlook sessie waarmee je ook veel meer kunt doen dan met SendObject. Zelf zou ik overigens de SQL onder het rapport aanpassen, ik werk nooit meer met filters in rapporten.
 
Hallo Octafish,

In eerste instantie de beste wensen voor 2017.

De macro vernieuwen hoorde er niet in klopt.
de namen veranderen zonder het procent teken is ook geen probleem.
Het rapport 1 maal te openen op 1 regel krijg ik niet voor elkaar.
de naam van het rapport in de mail lukt me ook niet.

Hij print, hij slaat het op als pdf , hij opent de mail met de bijlage
(alleen die naam als bijlage zou anders moeten).
hij zet de tekst in de mail. (zodat ik op dat moment op verzenden kan drukken).
Ik ben niet ontevreden gezien mijn kennis van VBA.

De code zoals ik hem nu heb zal zeker niet oke zijn voor en kenner van VBA.
Maar door te proberen om dingen werken te krijgen en geen foutmeldingen
te krijgen maakt al blij.
wat U mij voorstelt geloof ik direct, maar ik denk dat ik daar ook niet uitkom.
Alleen en klein stukje code om die naam te anderen zou ik zeer op prijs stellen.

Vr Groet Jan
 
In jouw code open je 2 maal hetzelfde rapport, al doe je dat op twee verschillende manieren. Maar het resultaat van de actie is hetzelfde, alleen de manier waarop je het filter samenstelt is anders. Eén van die regels kan dus weg. Sterker nog: ze kunnen allebei weg (rapport wordt namelijk niet meer geopend) als je mijn techniek overneemt. Die bestaat er uit dat je een vaste query onder het rapport hangt (ik noem hem hier qFactuur) waarvan je steeds het filter aanpast.
Ik heb even een fantasiequery gemaakt die onder het rapport wordt gehangen; ik neem aan dat je de juiste query er zelf wel onder kan brouwen. Zelf maak ik eerst op de normale manier de query, kopieer vervolgens de SQL uit het SQL venster en verbouw die dan zodanig dat hij er netjes uitziet in het VBA venster.
In het bovenste stuk wordt dus de SQL opgebouwd en toegewezen aan de vaste query. In het onderste stuk wordt de rapportnaam bepaald a.d.h.v. het ID en de datum, het rapport geëxporteerd, daarna het rapport hernoemd naar de exportnaam, de mail uitgevoerd en het rapport weer teruggezet naar de oude naam voor de volgende actie.

Code:
Private Sub cmdFactuur_Click()
Dim stDocName As String
Dim sqlTemp As String
Dim qDef As QueryDef
Set qDef = CurrentDb.QueryDefs("qFactuur")
    sqlTemp = "SELECT tFactuur.ID, IIf([Betaald]=False And Date()-[Besteldatum] > 30,""Herinnering"","""") AS Herinnering, tFactuur.Besteldatum, " _
        & "tFactuur.Bestelnummer, [Aanhef] + "" "" & [Voorletters] + "" "" & [Voegwoord] + "" "" & [Naam] AS Naamveld, " _
        & "[Adres]+""  "" & [postcode]+""  "" & [woonplaats] AS Adresgegevens, & " _
        & "tFactuur.Leverdatum, Factuur.Volgnr, IIf([Volgnr] Is Null,"""",[Volgnr]) AS TonenVolgnummer, " _
        & "IIf([Leverwijze]=""Ophalen"","""") AS Afgehandeld, tVerkopers.Verkoper, Factuur.Verwerker " _
        & "FROM tKlanten INNER JOIN (tVerkopers INNER JOIN tFactuur.Bestelnummer, ON " _
        & "tVerkopers.VerkoperID = tFactuur.VerkoperID) ON tKlanten.KlantID = tFactuur.KlantID " _
        & "WHERE (tFactuur.ID=" & Me.ID & ");"
    qDef.SQL = sqlTemp

    stDocName = Right("0000" & Me.ID, 4) & "-" & Format(Date, "yyyymmdd")
    DoCmd.OutputTo acOutputReport, "Factuur21", acFormatPDF, "H:\Facturen\" & stDocName & ".pdf"
    DoCmd.Rename stDocName, acReport, "Factuur21"
    DoCmd.SendObject acSendReport, stDocName, acFormatPDF, "xxxxx@xxxx.nl", , , "Factuur. ", "  Hoi hoi,  " & Chr(13) & _
    " Bijgesloten vindt u de factuur van  " & Chr(13) & Me.Naam & Chr(13) & Me.Datum & Chr(13) & _
    " Vriendelijke groet ikke", , True
    DoCmd.Rename "Factuur21", acReport, stDocName
End Sub
 
mailen

Hoi Octafish,

Ik ben er mee bezig maar dit is nog niet makkelijk voor mij.
en Query maken lukt wel maar om in die query de sql te plaatsen heb ik dus nog niet
voor elkaar ( ik doe me best maar kan wel even duren voordat ik dat snap).
wordt vervolg.
ik dacht dat het iets simpelder zou zijn.

Groetjes Jan
 
Een Query maken lukt wel maar om in die query de sql te plaatsen heb ik dus nog niet
voor elkaar
Dat snap ik, het is namelijk precies andersom :). Je maakt een query, gaat dan naar het SQL venster en daar staat de SQL code die je moet hebben. Die plak je vervolgens in de VBA code. Meestal moet je die een beetje aanpassen, vooral als er aanhalingstekens in staan. Maar je ziet gauw genoeg waar de fouten zitten, dat geeft de code aan.
 
mailen

Hoi Octafsh,

was even zoeken maar ik heb de query gemaakt en de sql gevonden.
eerste keer dat ik op deze manier iets maak, maar de sql gevonden en
geplakt in aangepast en geeft geen foutmelding.
aan het eind van die code staat qDef.SQL = SqlTemp dat wordt geel een geeft
aan dat het fout is heb gekeken en gekontroleerd maar kom niet achter waarom.
U enig idee?
vr groet Jan
 
Een tekenreeks in een string zetten geeft an sich zelden een fout, tenzij je met aanhalingstekens rommelt. Dus wel goed dat je daar niks op hebt, maar er zit dan blijkbaar toch iets niet goed in de SQL want je kunt de nieuwe SQL dus niet toewijzen aan de query. Je kunt dit eens proberen:
Code:
Dim t as String
t = Inputbox("","", sqlTemp)
De code die je nu krijgt kun je kopieëren en plakken in een nieuwe (lege) query. Als je een query aanmaakt zonder tabel, kom je vanzelf in het SQL scherm terecht, en daar plak je dan dus je code. Vervolgens kun je de query uitvoeren (zal niet lukken als er een fout in zit) of aanpassen in het query ontwerp venster.
 
mailen

Hoi octafish,

Ik heb een lege query gemaakt en daar jou code geplaast, daarna op uitvoeren
dan geeft hij het volgende aan " er is een ongeldige SQL instructie gevonden,delete,insert,procedure,select,of update werd verwacht"

heb ook even en bestaande query geopend en daar het SQL venster geopend daar stond dus
netjes alles in wat er in de query was geselecteerd . daarna op uitvoeren en dat gaf netjes aan wat
er was gevraagd in de query.

vr Groet Jan
 
Toch móet er een fout in zitten, want anders werkte het :). Zolang we noch de db, noch de query zien houdt het hier voor de helpers denk ik wel op...
 
mailen vervolg

Hoi Octafish,

Ik snap het en daarom stuur ik een bijlage met het test prgtje met o,a de knoppen hoe ik het had bedacht en met een knop hoe ik denk dat U voorstelde.
Met de knoppen van mij werk ik op de volgende manier ik zoek de factuur op het id nr op en dan klik ik en wordt de factuur geprint opgeslagen en in de de mail geplaatst. twee knoppen 1 voor 6% en 1 voor 21%.
werkt opzich maar wilde dus dat hij in de mail ook het id nr en datum zou zetten.
Onder de knop uitvoeren zit wat u me voor stelde en daar zal ik wel het nodige fout aan hebben.
Ik hoop dat U hier genoeg aan heeft en iets voor me kan betekenen.

vr groet jan
 

Bijlagen

  • helptest.rar
    41,6 KB · Weergaven: 20
mailen

Hoi,

Heeft U er al een blik op kunnen werpen?

vr groet, Jan
 
Ja, en met wat kleine aanpassingen doet-ie het prima.
Code:
Private Sub Knop70_Click()
Dim stDocName As String
Dim sqlTemp As String
Dim qDef As QueryDef

    Set qDef = CurrentDb.QueryDefs("qFactuur21")
    sqlTemp = "SELECT Id, memo, datum, naam, adres, plaats, postcode," _
      & "[gewerkte uren], [exstra uren], [totaalbedrag materialen], [subtotaal]+[Btw21] AS factuurbedrag," _
      & "[gewerkte uren]+[exstra uren]+[totaalbedrag materialen] AS subtotaal, [gewerkte uren]+[exstra uren] AS urentotaal," _
      & "[subtotaal]/100*21 AS [Btw21], [21]" _
      & "FROM tfacturen " _
      & "WHERE (Id=" & Me.Id & ");"
    qDef.SQL = sqlTemp
    stDocName = Right("0000" & Me.Id, 4) & "-" & Format(Date, "yyyymmdd")
    DoCmd.OutputTo acOutputReport, "Factuur21", acFormatPDF, "E:\Facturen\" & stDocName & ".pdf"
    DoCmd.Rename stDocName, acReport, "Factuur21"
    DoCmd.SendObject acSendReport, stDocName, acFormatPDF, "xxxxx@xxxx.nl", , , "factuur. ", "  Hoi hoi,  " & Chr(13) & _
    " Bijgesloten vindt u de factuur van  " & Chr(13) & Me.naam & Chr(13) & Me.datum & Chr(13) & _
    " Vriendelijke groet ikke", , True
    DoCmd.Rename "Factuur21", acReport, stDocName
End Sub
 
mailen

Hoi Octafish,

Ik ben er blij mee het werkt super, heb het even goed bekeken wat er allemaal fout ging. O,a in de query ging het zoeken fout.
Heb nog 1 vraag kan je in dezelfde code ook een printopdracht meenemen?? Ik heb wat dingen geprobeerd maar het probleem dat ik steeds krijg dat hij het document moet openen om te printen, en dan werkt de rest niet meer. er is vast en stukje code voor, dat zou moeten werken.
Zou top zijn als dit ook kan, ik print nu apart met en andere knop.
Moet ik dit onder een nieuwe vraag brengen hier.

Vr Gr Jan
 
De normale manier van een rapport openen is niet met acPreview, die zet hem op het scherm, maar met acNormal. Dan wordt het rapport namelijk gelijk afgedrukt. Je hoeft dus geen aparte printopdracht te geven.
 
mailen

Hoi Octafish,

Ook dat is gelukt met en klein stukje exstra vba werkt de knop nu zoals ik het graag wilde.
Ben erg blij met de hulp die je hebt gegeven.
Ik zet deze vraag op klaar en nogmaals bedankt.

Vr Gr Jan
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan