Rapport kunnen opslaan bij verzending

Status
Niet open voor verdere reacties.

gangstalaz

Gebruiker
Lid geworden
13 sep 2010
Berichten
131
Hallo,

Graag zou ik hulp willen hebben bij het opslaan van het rapport (bestelling).
Wanneer ik het rapport heb opgesteld, kan ik deze zonder problemen per mail verzenden een leverancier.
Alleen wil ik dat wanneer ik een rapport heb opgesteld, deze ook kan opslaan in een map (bijv. C:\bestellingen). Kan dit met een ander opdrachtknop? Of is het mogelijk dat wanneer ik op verzenden klik, dat het automatisch in dat mapje opslaat?
Ik heb dit nodig voor een wekelijkse rapportage aan bedrijfsleider.
Hoe kan ik dit voormekaar krijgen?

Alvast bedankt!
 
Om te beginnen: een rapport is een interactief object; als de gegevens veranderen, veranderen die ook in het rapport. Een rapport ligt dus in beginsel niet vast. Rapporten zijn ook bedoeld om af te drukken, dan heb je uiteraard wel een vaste kopie.

Wat je doet met verzenden van een rapport, is dus een exportbestand maken, dat je vervolgens meestuurt. Dat exportbestand kan verschillende formaten hebben, waarbij vanaf 2007 PDF de beste optie is. Als je met een oudere versie werkt, dan dien je een aparte PDFtool te hebben waarmee je pdf-bestanden kunt maken.
Om een rapport dus op te kunnen slaan, moet je het rapport kunnen exporteren naar een bestand. Bij voorkeur dus PDF, want exporteren naar Word, HTML of Excel maakt over het algemeen een zooitje van je rapport. De lokatie daarvoor kun je met VBA in een dialoogvenster selecteren, en het opslaan is dus verder prima te doen. De hele procedure kun je in de Sendmail actie hangen, zodat alles in één keer gebeurt.
 
De lokatie daarvoor kun je met VBA in een dialoogvenster selecteren, en het opslaan is dus verder prima te doen. De hele procedure kun je in de Sendmail actie hangen, zodat alles in één keer gebeurt.

Ik snap het niet. Ik heb de volgende in de Sendmail actie staan:


Private Sub Knop65_Click()
On Error GoTo Err_Knop65_Click

Dim stDocName As String

stDocName = "rpt_Leveranciers"
DoCmd.SendObject acReport, stDocName

Exit_Knop65_Click:
Exit Sub

Err_Knop65_Click:
MsgBox Err.Description
Resume Exit_Knop65_Click

End Sub

Ik weet niet wat ik hieraan toe moet voegen. Ik snap je niet:(:$
 
Het opslaan doe je onder de Docmd.SendObject regel. Je kunt overigens een vaste lokatie gebruiken voor de bestanden, bijvoorbeeld in de map van de db. Je legt het pad dan vast in een constante, die je verder in de procedure aanroept.
Code:
CurrentProject.Path & "\Bestanden\"
In je procedure krijg je dan bijvoorbeeld:

Code:
stDocName = "rpt_Leveranciers"
sPrinter=Application.Printer 
DoCmd.SendObject acReport, stDocName
Set Application.Printer = Application.Printers("Acrobat PDFWriter")
DoCmd.OpenReport strReport, acViewNormal
Application.Printer = sPrinter
Wil je bijvoorbeeld een Excel exporteren, dan krijg je zoiets:
Code:
sBestand = sPad & stDocName & " - " & Format(Date, "dd-mm-yyyy") & ".xls"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, sExport, sBestand, True
 
Ik bedank je eerst voor je hulp!

Ik heb de volgende code gekopieerd:

stDocName = "rpt_Leveranciers"
sPrinter=Application.Printer
DoCmd.SendObject acReport, stDocName
Set Application.Printer = Application.Printers("Acrobat PDFWriter")
DoCmd.OpenReport strReport, acViewNormal
Application.Printer = sPrinter

Maar het lukt niet. Wanneer ik op het opdrachtknopje "verzenden" klik, krijg ik de volgende melding: De eigenschap of methode wordt niet ondersteund door dit object."
Ik maak zelf gebruik van access 2003. Kan het daaraan liggen?

En is het niet mogelijk dat het rapport automatisch in een map buiten de db wordt opgeslagen (bijv. C:\bestellingen\rapport)?
 
Access 2003 ondersteunt helaas geen PDF export. Dat zit er pas in vanaf 2007. Zelf gebruik ik de module van Stephan Lebans, die voor de oudere versies een PDF export heeft gemaakt. Omdat de werkwijze veel te uitgebreid is om hier neer te pennen, kun je beter de voorbeelddb ophalen en de betreffende module in je eigen db importeren. Met een paar kleine aanpassingen moet het dan wel werken.
Voor het opslaan van de bestanden kun je een variabele of constante gebruiken. Je hoeft de bestanden dus niet op te slaan in de map waar de db staat. Eventueel kun je daar ook een dialoogvenster voor gebruiken, zodat je een map kunt aanwijzen.
 
En hoe moet het als ik het als wordbestand wil opslaan?
Want het hoeft allemaal niet zo mooi.
 
Weet wat je zegt.... een export naar Word ziet er bepaald niet geweldig uit! Maar proberen kan natuurlijk altijd:

Code:
DoCmd.OutputTo acOutputReport, strReport, acFormatRTF, "C:\bestellingen\Rapport\Rapport_" & Me!RegId & ".rtf", True
 
Weet wat je zegt.... een export naar Word ziet er bepaald niet geweldig uit! Maar proberen kan natuurlijk altijd:

Code:
DoCmd.OutputTo acOutputReport, strReport, acFormatRTF, "C:\bestellingen\Rapport\Rapport_" & Me!RegId & ".rtf", True


Ik krijg de volgende melding: Kan het veld RegId niet vinden waarnaar wordt verwezen in de expressie.
Moet er niet een verwijzing zijn naar het rapport? Want heel het rapport moet opgeslagen worden.

Sorry dat ik maar bezig blijf maar ik krijg het echt niet voor mekaar:(.
 
Mijn code was slechts een voorbeeldje.... Ik ga er niet vanuit dat je een veld RegID hebt, maar gebruik dat dus om een rapportnaam te genereren op basis van een sleutelveld. Je kunt de code dus ook zo gebruiken:
Code:
[FONT=Trebuchet MS]DoCmd.OutputTo acOutputReport, "rpt_Leveranciers", acFormatRTF, "C:\bestellingen\Rapport\Rapport_" & Format(Date(),"yymmdd") & ".rtf", True[/FONT]
Dan zet-ie er een datumcode achter.
 
bijna perfect man!

ik heb nu een klein probleempje. bij het opslaan van een ander rapport in dezelfde map, wordt het oude rapport (Rapport_101004) vervangen door de nieuwe omdat ze dezelfde datum hebben.
er kunnen meerdere bestellingen op 1 dag zijn dus kunnen we er niet voor zorgen dat de huidige tijdstip erachter komt te staan?

ik dacht dat dat met zoiets kon: =now(0)
maar het lukt me niet.

Of iets anders wat erachter kan.
als jij een beter idee hebt.(A)
 
Gebruik dan

Code:
DoCmd.OutputTo acOutputReport, "rpt_Leveranciers", acFormatRTF, "C:\bestellingen\Rapport\Rapport_" & Format(Date(),"yymmdd hh:mm:ss") & ".rtf", True

PS in VBA Help kun je de standaard Access functies opzoeken.

Tardis
 
Gebruik dan

Code:
DoCmd.OutputTo acOutputReport, "rpt_Leveranciers", acFormatRTF, "C:\bestellingen\Rapport\Rapport_" & Format(Date(),"yymmdd hh:mm:ss") & ".rtf", True

PS in VBA Help kun je de standaard Access functies opzoeken.

Tardis

Visual Basic for Applications Functions komt niet tervoorschijn als ik erop klik. Krijg ik een blanco pagina. Maargoed.
nu ik er yymmdd hhmmss van heb gemaakt, krijg ik 101004 000000.
hh:mm:ss lukt niet. dan krijg ik de volgende foutmelding: De uitvoergegevens kunnen vanuit Magazijn niet worden opgeslagen in het bestand dat u hebt geselecteerd.
dit gebeurt alleen als er hh:mm:ss bijstaat.
als ik er hh:mm of mm:ss van maak, krijg ik een melding dat er onvoldoende ruimte is.

waar kan dit aan liggen? of is er een ander mogelijkheid om de naam elke keer anders te krijgen? anders blijven we maar bezig :$
 
Vervang Date() door Now(). Date geeft een datum op tijdstip 0:00. En dat verandert niet.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan