Meerdere Access rapporten opslaan als in losse PDF bestanden

Status
Niet open voor verdere reacties.

RickS82

Gebruiker
Lid geworden
15 aug 2016
Berichten
11
Beste lezer,

voor het werk wil ik graag een access tabel omzetten naar een rapport en dan per rapport/record een PDF bestand maken.
Aangezien het straks om duizenden records gaat hoop ik dat dit op een makkelijke manier kan.

Wie kan mij hierbij helpen?

Groet

Rick
 
Daarvoor moet je (uiteraard) eerst een rapport maken op basis van je tabel(len). Dus 'een tabel omzetten naar een rapport' kan en bestaat niet. Rapporten kun je maken met een wizard, maar afhankelijk van de hoeveelheid tijd die je hebt wordt/is dat een heel frustrerende bezigheid, want ik heb in de 30-40 jaar dat ik met Access werk nog nooit een fatsoenlijk rapport met een wizard kunnen maken. Ik maak ze dus op basis van een leeg rapport helemaal zelf.

Daarbij moet je dus, omdat je op basis van één specifiek gegeven wilt exporteren naar pdf, de export regelen via een VBA procedure waarbij je de onderliggende tabel filtert op basis van dat ene gegeven, en de pdf dan exporteert met (ik neem aan dat je dat ook wilt) de naam van die klant.
 
Maak een query (Q1 in mijn voorbeeld) op basis van de tabel (T1). Voor het gemak:
Code:
SELECT * FROM T1
Ontwerp een rapport (R1) op basis van die query. Nu alleen nog een knop op een formulier zetten met de volgende VBA code:
Code:
Dim qd As QueryDef
Dim rs As Recordset
Dim strSQL As String

Set rs = CurrentDb.OpenRecordset("SELECT ID FROM T1")

While Not rs.EOF
    DoCmd.DeleteObject acQuery, "Q1"
    strSQL = "SELECT * FROM T1 WHERE ID = " & rs!Id
    Set qd = CurrentDb.CreateQueryDef("Q1", strSQL)
    DoCmd.OutputTo acOutputReport, "R1", acFormatPDF, "C:\Temp\R_" & rs!Id & ".pdf"
    rs.MoveNext
Wend
 
Een wonderlijke oplossing van Peter, ik heb zelf een andere, maar als je hem kunt gebruiken, gewoon doen :).

Wat betreft de wondere wereld van Peter:
1. waarom zou je een query moeten maken voor het rapport, i.p.v. gewoon de tabel er onder hangen?
2. Waarom de query elke keer verwijderen? En niet via de QueryDefs de SQL van de bestaande query aanpassen?
 
Waarom? Omdat TS een rapport per record wil hebben 😁😁
 
Nee, je leest mijn antwoord niet (goed). Ik zeg net dat het veel netter kan. Met de aanwijzingen die ik heb gegeven, moet je er uit kunnen komen wat je kan verbeteren.
 
Ben benieuwd of TS er met jouw aanwijzingen uitkomt. Maar zoals iemand snedig opmerkte in een ander draadje: "En zullen we nu eens (voor de verandering) wachten op wat TS te melden heeft?".
 
Dat zou ik geweest kunnen zijn, dat zeg ik namelijk ook met enige regelmaat ;).

Maar dan toch niet zonder míjn variant te laten zien natuurlijk. Al was het maar omdat iemand anders al zo wijs (zelf zeg ik liever: voorbarig) was om ongevraagd voorbeeldcode te posten. Zelf wacht ik liever af tot TS hierom vraagt. Wij weten tenslotte niet of TS de aangeboden oplossingen zelf kan uitvoeren of niet. Daarom neem ik altijd de positie in dat ik pas met code kom als er om gevraagd wordt.

Code:
Public Function Rapporten()
Dim rs As DAO.Recordset
Dim qDef As QueryDef
Dim strSQL As String

    Set rs = CurrentDb.OpenRecordset("Select ContactID, LastName FROM tblContacts")
    Do Until rs.EOF
        strSQL = "SELECT * FROM qryContacts WHERE ContactID = " & rs!ContactID
        Set qDef = CurrentDb.QueryDefs("qTemp")
        qDef.SQL = strSQL
        DoCmd.OutputTo acOutputReport, "rptContacts", acFormatPDF, _
             "C:\Stuff\Facturen\" & rs!ContactID & " - " & rs!LastName & ".pdf"
        rs.MoveNext
    Loop
    rs.Close

End Function
Oh ja, het rapport heeft uiteraard als basis de query qTemp. Die ik bijna altijd wel voor de rapporten gebruik.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan