Vanuit Access PDF opslaan en verzenden met juiste naam

Status
Niet open voor verdere reacties.

anietje62

Gebruiker
Lid geworden
1 dec 2006
Berichten
38
Acces 2007
Door diverse draadjes samen te voegen heb ik een code gefabriceerd, die vanuit een formulier door op een knop de drukken een pdf met een factuur met de juiste factuurnaam opslaat in een map en daarna dezelfde pdf als bijlage in mijn mail zet. Afzender wordt gehaald uit het formulier. Alles werkte goed, tot ik de bijlage in de mail ook met het factuurnummer wilde benoemen. (Dus niet alleen Factuur, maar bijv Factuur PBM 2015-0019). Het noemen van de bijlage lukte, maar er wordt alleen een leeg rapport opgeslagen en in de bijlage van de mail gezet.
ik denk dat ik daar ergens een fout heb gemaakt bij het veranderen van de naam, maar ik kan het niet vinden. Wie waagt zich er aan?

Hier de code

Code:
Private Sub Command56_Click()
Me.Refresh
Dim folder As String
Dim sNaam_Ori As String, sNieuw As String
Dim strWhere As String
    On Error GoTo errHandler
 'Namen vastleggen en rapport hernoemen
    sNaam_Ori = "rptFactuur"
    sNieuw = "Factuur PBM " & [FactuurnummerId]
    DoCmd.Rename sNieuw, acReport, sNaam_Ori
    strWhere = "[FactuurnummerId] = '" & Me.FactuurnummerId & "
folder = [pad]
DoCmd.OpenReport sNieuw, acPreview, "", strWhere, acHidden
'Sla factuur op als pdf
DoCmd.OutputTo acOutputReport, sNieuw, acFormatPDF, folder & "Factuur PBM " & [FactuurnummerId] & ".pdf", True
'Verzend factuur
DoCmd.SendObject acReport, sNieuw, acFormatPDF, Me.mail, "", "", "Factuur PBM " & Me.txtFactuurnummerId, "In de bijlage de factuur van PBM", 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
 
Maak er eens dit van:
Code:
DoCmd.SendObject acReport, sNieuw, acFormatPDF, Me.mail, "", "", "Factuur PBM " & Me.txtFactuurnummerId & " In de bijlage de factuur van PBM", True, ""
 
Laatst bewerkt:
Ik kan me niet voorstellen dat het probleem in het verzenden ligt; TS geeft aan dat het rapport leeg blijft. Dan ligt het probleem elders.
Zelf zou ik het nooit op deze manier doen, maar het rapport aan een vaste query hangen en daar de SQL van veranderen op basis van het FactuurID. Dan hoeft je nooit te rommelen met het rapport, want dat kun je dan gelijk afdrukken. Hernoemen doe je volgens mijnwel ok, dus dat zou moeten werken.
 
Opgelost

Beste Octafish en Edmoor,
bedankt voor jullie reactie.
Omdat ik niet goed raad wist met het voorstel van Octafish en het inderdaad niet ging om het verzenden zelf, heb ik de berichten waar ik de code uitgehaald heb eens goed nagelopen en ik ontdekte dat ik een fout in de code heb gemaakt.
Er misten wat aanhalingstekens op het eind van de regel strwhere...

de juiste code van die regel moet zijn

Code:
strWhere = "[FactuurnummerId] = '" & Me.FactuurnummerId "'"

Nadat ik dit had verbeterd werkte de knop perfect!! :D

Dit item is dus opgelost!
 
ps voor degenen die geïnteresseerd zijn:
[pad] is de naam van een veld op mijn formulier, waar ik het volledige adrespad invul waar de pdf's terecht moeten komen.
Zo kan ik gemakkelijk een andere map kiezen als dat nodig is.
 
En de (veel betere) oplossing die ik dus gebruik is relatief simpel. Met de QueryDefs colllectie verander ik de SQL van de query die onder een rapport hangt. De query krijgt dus de letterlijke waarde van het gekozen ID als criterium en dat nummer wordt opgeslagen in de query. Omdat het rapport nu altijd aan een (wisselend) ID hangt, kan je nooit het complete bestand mailen, maar krijg je dus het gekozen ID in het rapport. Je hoeft niks meer te openen zoals je dat nu doet, en er kan dus ook niks meer misgaan.
Ik gebruik de techniek regelmatig, zowel in de cursus als in het forum, dus bekijk het eens :).
 
Okee,
ik wil dat wel eens bekijken in de handleiding, omdat ik nu nog niet snap wat je bedoelt. Ik ben altijd voor verbetering vatbaar :)
Weet je toevallig uit je hoofd in welk hoofdstuk ik ongeveer moet kijken, ik vind het terugzoeken in de (overigens zeer duidelijke) handleiding wat moeilijker (of staat er ergens een soort index?).

Alvast bedankt.
 
Ja, die index.... Wordt tijd dat ik die eens maak :D. Ik heb even een stukje code opgezocht dat hopelijk duidelijk maakt wat ik bedoel.

Code:
Dim strSQL As String
Dim qTmp As QueryDef

    strSQL = "SELECT ArtcodeID, Omschrijving, ArtikelgroepID FROM qArtikelen_Leverancier "
    strSQL = strSQL & "WHERE (ArtikelgroepID = " & Me.FabrikaatCombo & ") "
    strSQL = strSQL & "ORDER BY ArtcodeID;"
    Set qTmp = CurrentDb.QueryDefs("tmpRapport")
    qTmp.SQL = strSQL
End Sub

Hierbij zie je dat een queryobject wordt gemaakt (qTmp) waarvan de SQL string wordt aangepast met een nieuwe SQL string. Deze procedure gebruik ik dus heel veel; alle rapporten hang ik aan dezelfde query, want die wordt toch elke keer opnieuw bijgewerkt vanuit het formulier. En voor de query maakt het niet uit wat-ie doet.
 
Dit stukje code (aangepast) moet ik dan onder de knop hangen?
(Ik ben een leek in VBA, door de laatste tijd te proberen, ben ik er wel iets meer van gaan begrijpen en soms werkt iets zonder dat ik precies snap wat het doet, maar als het maar werkt denk ik dan).
 
Je krijgt dan zoiets:

Code:
Private Sub Command56_Click()
Dim Folder As String, rapNaam As String
Dim sNaam_Ori As String, sNieuw As String
Dim strTekst As String, strSQL As String
Dim qTmp As QueryDef

     'Namen vastleggen en rapport hernoemen
    sNaam_Ori = "rptFactuur"
    sNieuw = "Factuur PBM " & [FactuurnummerId]
    DoCmd.Rename sNieuw, acReport, sNaam_Ori
    strSQL = "SELECT [FactuurnummerId], ArtcodeID, Omschrijving, ArtikelgroepID FROM qArtikelen_Leverancier "
    strSQL = strSQL & "WHERE ([FactuurnummerId] = '" & Me.FactuurnummerId & "') "
    strSQL = strSQL & "ORDER BY ArtcodeID;"
    Set qTmp = CurrentDb.QueryDefs("tmpRapport")
    qTmp.SQL = strSQL
    Folder = Me.pad & IIf(Right(Me.pad, 1) <> "\", "\", "")
    rapNaam = Folder & "Factuur PBM " & Me.FactuurnummerId
    strTekst = "In de bijlage de factuur van PBM"
    DoCmd.OutputTo acOutputReport, sNieuw, acFormatPDF, rapNaam & ".pdf", True
    DoCmd.SendObject acReport, sNieuw, acFormatPDF, Me.mail, "", "", rapNaam, strTekst, True, ""
    DoCmd.Rename sNaam_Ori, acReport, sNieuw

End Sub

Het rapport koppel je dus aan de query tmpRapport. Normaal gesproken doe ik ook een check op de query; bestaat-ie niet dan moet hij namelijk nog worden aangemaakt. Niet compleet, maar voor het idee:

Code:
tmpQuery:
    Set qTmp = CurrentDb.CreateQueryDef("tmpRapport", strSQL)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan