printen en opslaan van een rapport

Status
Niet open voor verdere reacties.

Bospeen

Gebruiker
Lid geworden
23 aug 2005
Berichten
150
Beste forumleden,
Ik heb onderstaande (voorbeeld)code aangemaakt voor het printen en opslaan van een rapport (brief_1) als het aan bepaalde criteria voldoet. Op zich werkt de code wel, maar ik vind 't niet zo netjes gaan:
er poppen een paar vensters op (printpreview en printopdracht) waar ik de gebruiker niet mee wil confronteren. Ik weet niet hoe ik dit kan voorkomen, iemand een suggestie?
Bij voorbaat dank.

Code:
If Me.veld1 > 0 And Me.veld2 > 0 Then
    stLinkCriteria = "[zoekveld] = '" & Me![zoekveld] & "'"
    
    DoCmd.OpenReport "brief_1", acViewPreview, , stLinkCriteria, acHidden
    DoCmd.SelectObject acReport, "brief_1"
    DoCmd.PrintOut
    DoCmd.OutputTo acOutputReport, "brief_1", acFormatPDF, "C:\DATA\" & Me.id & "_" & Me.jaar & "_brief_1.PDF", False
    DoCmd.Close acReport, "brief_1", acSaveNo
    
    MsgBox "Brief_1 is geprint en opgeslagen."
    End If
 
Je gebruikt een techniek die ik op het forum al jaren afraad. Probeer dus eens een andere variant, namelijk deze:

1. Hang een tijdelijke query onder het rapport (wel met een vaste naam, bijvoorbeeld "qBrief_1")
2. Verander de SQL (de query dus) van die tijdelijke query zodat die overeenkomt met de selectie
3. Gebruik de standaard methode om een rapport te openen (=afdrukken)
4. Exporteer het rapport

Code:
Sub testjeH()
Dim qDef As QueryDef
Dim strSQL As String
    If Me.veld1 > 0 And Me.veld2 > 0 Then
        Set qDef = CurrentDb.QueryDefs("qBrief_1")
        strSQL = "SELECT [Veld1], [Veld2], [Veld3] FROM [Tabel] WHERE [zoekveld] = """ & Me.Zoekveld & """"
        qDef.SQL = strSQL
        DoCmd.OpenReport "brief_1", acViewNormal
        DoCmd.OutputTo acOutputReport, "brief_1", acFormatPDF, "C:\DATA\" & Me.ID & "_" & Me.jaar & "_brief_1.PDF", False
        MsgBox "Brief_1 is geprint en opgeslagen."
    End If
End Sub
 
Ik heb alle velden (ca. 15) al tot mijn beschikking op het formulier vanwaar ik de code (knop) gebruik.
Waarom raad je mijn techniek af en vind je het beter hier ook nog een query voor te bouwen?

Is er geen simpelere oplossing, zoals bijvoorbeeld:

Code:
Echo = false    
DoCmd.OpenReport "brief_1", acViewNormal, , stLinkCriteria,
    DoCmd.OutputTo acOutputReport, "brief_1", acFormatPDF, "C:\DATA\" & Me.id & "_" & Me.jaar & "_brief_1.PDF", False
Ech = true

Of zoiets?
 
Wat hebben de velden op je formulier met de velden in je rapport te maken? Die heeft, neem ik aan, toch een eigen Recordbron? Mijn oplossing is, vind ik, behoorlijk simpel en dat niet alleen: zo robuust en stabiel als je hem maar hebben wilt. Daarnaast ben je niet eens afhankelijk van het (geopende) formulier omdat de selectie in de query is vastgelegd. Het rapport is dus altijd te openen met de laatste selectie. Voor zover dat nuttig is, tenminste :). Maar waar het om gaat, is dat het jouw probleem oplost en dat doet jouw code dus niet. Sowieso ben ik al geen voorstander van het nodeloos (al dan niet verborgen) openen en sluiten van objecten. Vertraagt alleen maar.
 
Even een toelichting:
Het formulier is een soort "behandelscherm" voor de gebruiker, recordbron is een tabel. Als de velden door de gebruiker naar wens zijn gevuld, kan er een brief (=rapport) worden geprint met velden uit dat formulier en dus tevens op basis van die tabel. De brief kan alleen maar worden geprint vanuit dit formulier (onder voorwaarde dat sommige velden correct gevuld zijn). Hierbij hoeft het rapport ook niet geopend te worden, het gaat me uitsluitend om printen en opslaan.
Nu lukt het mij met code niet om alleen dit printen en opslaan te bewerkstelligen zonder het rapport eerst (al dan niet hidden) te openen.
 
Heb zelf nog even verder gestoeid, het volgende werkt ook naar tevredenheid. Hoewel ook hier het rapport (even) getoond wordt alvorens het wordt geprint en opgeslagen.
@Octafish: in ieder geval bedankt voor de tips.

Code:
If Me.veld1 > 0 Then
    stLinkCriteria = "[zoekveld] = '" & Me![zoekveld] & "'"
    
    DoCmd.OpenReport "1_brief", acViewReport, , stLinkCriteria
    DoCmd.PrintOut
    DoCmd.OutputTo acOutputReport, "1_brief", acFormatPDF, "bla bla bla.PDF", False
    DoCmd.Close acReport, "1_brief", acSaveNo
    
    MsgBox "Brief1 is geprint en opgeslagen."
    End If
 
Nogmaals: de werkwijze waarbij je de query onder het rapport aanpast, is verre te prefereren boven deze methode. Ook al werkt die. Zelf stuur ik rapporten ook altijd via een formulier aan.
 
Ik heb je opmerkingen en werkwijze genoteerd. Zodra ik wat meer tijd heb ga ik die proberen.
Bedankt zover!!
 
Ik heb een beetje gelijkaardig probleem dat een uitslagen rapport, waar ik een gekoppelde achtergrondfiguur via VBA door een "bij opmaken" gebeurtenis, over de volledige pagina gebruik en dat dit netjes werkt bij gewoon afdrukken maar niet bij de automatische verborgen PDF functie. Ik denk dat dat komt omdat het rapport bij automatisch afdrukken en opslaan naar PDF eigenlijk nooit geladen wordt naar het rapport en dus het rapport nooit opgemaakt wordt met de afbeelding?
 

Bijlagen

Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan