PDF van Rapport

  • Onderwerp starter Onderwerp starter jacw
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

jacw

Gebruiker
Lid geworden
23 sep 2006
Berichten
88
Besturingssysteem
Windows 11
Office versie
Office 365
Goedemorgen,

Ik wil een knop aanmaken in een rapport (welke niet zichtbaar is tijdens afdrukken (dat lukt).
Nu heb ik al diverse voorbeelden gezien van een rapport automatische opslaan, alleen kom ik er niet uit.

de volgende gegevens moeten uit het rapport worden gehaald en in de map mijn documenten worden gezet en worden opgeslagen als PDF.

[eigen invulling factuur nr] &" "& [Factuurid] &" "&[naam] &" "&[woonplaats] &" "&"factuur"

Wie kan mij helpen?
Alvast bedankt.
Groet,
Jac Wobbes
 
Jac,

Het volgende heb ik gedaan:
Ik heb een knop: PDF opslaan, bij gebeurtenis een Gebeurtenisprocedure bij klikken. Daarin de volgende code
Code:
Private Sub PFD_opslaan_Click()
Dim FileName As String
Dim FilePath As String

FileName = Me.Betreft2 & " " & Me.KlantId

FilePath = "C:\Users\xxxx\Documents\Sharepoint xxxx\OneDrive – xxxx \Boekhouding\Boekhouding 2022\Debiteuren 2022\" & FileName & ".PDF"

DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, FilePath
MsgBox "De rekening is als PDF opgeslagen in de map Debiteuren 2022", vbInformation, "Klaar"

End Sub

De door jou genoemde velden in de laatste alinea moeten in de factuur staan die je als pdf wilt opslaan. ( Bij mij was dat niet zo en ik heb Me.Betreft2 op de rekening toegevoegd en bij eigenschappen de opmaak op niet zichtbaar gezet.)
 
Goedemorgen,

Ik heb de gegevens van jou overgenomen, echter geeft hij in eerste instantie een foutmelding bij [eigen invulling factuur nr]. Moet ik daar een underscore gebruiken? of is dat wat anders.
Ik heb hem even simpel gemaakt en toen kwam ik als een stap verder.
Echter bij de volgende regel krijg ik weer een foutmelding
Code:
DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, FilePath
de foutmelding is : Fout 2501 tijdens uitvoering "De actie OutputTo is geannuleerd.

Hoe dit op te lossen?

Ik gebruik Office365 (Abbonement)

Met groet,
Jac
 
Jac,

Heb je de velden voor de bestandsnaam zo gedaan??

FileName = Me. (zodra je de . heb getypt wordt een lijst met velden getoond. Selecteer het veld. In de code wordt het dan FileName = Me.[eigen invulling factuur nr]. Hier hoef je geen underscores tussen te zetten want veldnaam staat tussen [xxxxx]

Er zou moeten komen te staan:
FileName = Me.[eigen invulling factuur nr] & " " & me.Factuurid & " " & me.naam & " " & me.woonplaats & " factuur"

Ik gebruik ook Office365. Kun je anders de hele code plaatsen die je hebt gemaakt.

Misschien heb ik nog 1 tussenstap extra. Ik heb het volgende:
• De opdracht waarvan ik de factuur wil opslaan heb ik geopend
• Daar heb ik een knop, die - via een macro - de factuur in de standaardmodus opent
• Op de factuur van de klant die dan getoond wordt staat een knop “PDF opslaan”. Aan deze knop hangt de code die ik in # 2 heb gezet.
P.s. ik krijg een geel gearceerde DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, FilePath op het moment dat ik een pdf probeer aan te maken vanuit een opdracht zonder rekening.
 
Aan de hand van de diverse foutmeldingen kwam ik in een kant-en-klare applicatie de volgende code tegen.
Deze code aangepast en tevens geleerd dat namen van altijd aanelkaar moeten worden geschreven. dit heb ik opgelost door een verborgen veld aan te maken in mijn factuur.
Onderstaande code als voorbeeld bijgevoegd. deze werkt nu perfect

Code:
Function FileExist(FileFullPath As String) As Boolean
    Dim value As Boolean
    value = False
    If Dir(FileFullPath) <> "" Then
        value = True
    End If
    FileExist = value
End Function
Private Sub Knop52_Click()

    
    Dim fileName As String, fldrPath As String, filePath As String
    Dim answer As Integer
    
    fileName = jaar & FactuurID & " " & Me.Naam & " " & postcodewoonplaats & " " & "factuur"                 'PDF Bestandsnaam*
    fldrPath = "C:\Users\jacwo\Documents\facturen2022"       'Map waar rapport wordt opgeslagen*
    
    filePath = fldrPath & "\" & fileName & ".pdf"
    
    'Controle of bestand al is opgeslagen
    If FileExist(filePath) Then
        answer = MsgBox(prompt:="PDF Bestaat al: " & vbNewLine & filePath & vbNewLine & vbNewLine & _
                        "Moet het bestaande bestand worden vervangen?", buttons:=vbYesNo, Title:="Existing PDF File")
        If answer = vbNo Then Exit Sub
    End If
    
    On Error GoTo invalidFolderPath
    DoCmd.OutputTo objecttype:=acOutputReport, objectName:=Me.Name, outputformat:=acFormatPDF, outputFile:=filePath
    
    MsgBox prompt:="PDF opgeslagen als: " & vbNewLine & filePath, buttons:=vbInformation, Title:="Factuur geëxporteerd als PDF"
    Exit Sub
    
invalidFolderPath:
    MsgBox prompt:="Verkeerde map keuze.", buttons:=vbCritical
    
End Sub

Blijft nog een vraag over.
Is het mogelijk om de facturen op te slaan de bestaande map natuurlijk, maar dat afhankelijk van de datum, de factuur wordt opgeslagen in een maand map? En hoe dit in te voegen als programma code. Mijn datum wordt als 10-10-2021 weergegeven op de factuur

Bedankt voor de voorzet en in afwachting van mijn vraag.

Met groet,
Jac W
 
Jac,

Een beetje broddelwerk, maar het werkt wel. Probleem kan rond de jaarovergang komen als de factuur januari volgend jaar is. Er is ongetwijfeld iemand die dit beter kan, bijv. door gebruik te maken van variabelen oid ???

Wat heb ik gedaan:
1. Op de factuur een veld Maand2 gemaakt , besturingselementbron = =Format([Datum];"mm") en dit veld op onzichtbaar gezet (het veld [Datum] = de datum van de factuur)
2. Ik heb om te testen de map E:\Documents\ aangemaakt met de submappen
a. 01 Januari
b. 10 – Oktober
c. 11 – November
d. 12 – December
3. In de gebeurtenisprocedure Dim Maand2 As String toegevoegd
4. Verder heb ik een If statement toegevoegd, voor de maanden 1, 10, 11 en 12 (zie code hieronder)

De submappen voor de andere maanden en in de If statement spreken voor zich.

Zoals ik al aangaf: dit moet mooier kunnen, maar die kennis heb ik (nog) niet, maar hoe dan ook de pdf-bestanden van de facturen kwam in de map van de maand van de factuur
Ben benieuwd naar jouw reactie.

hieronder de code zoals ik die heb aangepast in mijn gebeurtenisprocedure
Code:
Private Sub PFD_opslaan_Click()

Dim FileName As String
Dim FilePath As String
Dim Maand2 As String

FileName = Me.Betreft2 & " " & Me.KlantId

If Me.Maand2 = "01" Then
     FilePath = "E:\Documents\01 - Januari\" & FileName & ".PDF"
     DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, FilePath
     MsgBox "De rekening is als PDF opgeslagen in de map januari", vbInformation, "Klaar"
End If
If Me.Maand2 = "10" Then
     FilePath = "E:\Documents\10 - Oktober\" & FileName & ".PDF"
     DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, FilePath
     MsgBox "De rekening is als PDF opgeslagen in de map oktober", vbInformation, "Klaar"
End If
If Me.Maand2 = "11" Then
     FilePath = "E:\Documents\11 - November\" & FileName & ".PDF"
     DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, FilePath
     MsgBox "De rekening is als PDF opgeslagen in de map november", vbInformation, "Klaar"
End If
If Me.Maand2 = "12" Then
     FilePath = "E:\Documents\12 - December\" & FileName & ".PDF"
     DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, FilePath
     MsgBox "De rekening is als PDF opgeslagen in de map december", vbInformation, "Klaar"
End If
    
End Sub
 
Dankjewel,

Ik heb aan de hand van je voorbeeld een en ander geprobeerd. Echter heb ik het filepath dusdanig gemaakt dat hij de maand als 01 neerzet, in de map heb ik ook gewoon een o1 aangemaakt. HET werkt perfect.
Code:
Function FileExist(FileFullPath As String) As Boolean
    Dim value As Boolean
    value = False
    If Dir(FileFullPath) <> "" Then
        value = True
    End If
    FileExist = value
End Function
Private Sub Knop52_Click()

    
    Dim fileName As String, fldrPath As String, filePath As String
    Dim answer As Integer
    
    fileName = jaar & FactuurID & " " & Me.Naam & " " & postcodewoonplaats & " " & "factuur"                 'PDF Bestandsnaam*
    fldrPath = "C:\Users\jacwo\Documents\facturen\" & Me.maand  'Map waar rapport wordt opgeslagen*"
    
    filePath = fldrPath & "\" & fileName & ".pdf"
    
    'Controle of bestand al is opgeslagen
    If FileExist(filePath) Then
        answer = MsgBox(prompt:="PDF Bestaat al: " & vbNewLine & filePath & vbNewLine & vbNewLine & _
                        "Moet het bestaande bestand worden vervangen?", buttons:=vbYesNo, Title:="Existing PDF File")
        If answer = vbNo Then Exit Sub
    End If
    
    On Error GoTo invalidFolderPath
    DoCmd.OutputTo objecttype:=acOutputReport, objectName:=Me.Name, outputformat:=acFormatPDF, outputFile:=filePath
    
    MsgBox prompt:="PDF opgeslagen als: " & vbNewLine & filePath, buttons:=vbInformation, Title:="Factuur geëxporteerd als PDF"
    Exit Sub
    
invalidFolderPath:
    MsgBox prompt:="Verkeerde map keuze.", buttons:=vbCritical
    
End Sub



Code:
fldrPath = "C:\Users\jacwo\Documents\facturen\" & Me.maand
bovenstaand heb ik nog geprobeerd met de jaar functie
fldrPath = "C:\Users\jacwo\Documents\facturen" & Me.jaar &"" & Me.maand
maar dat werkt niet. voor de rest ben ik zeer tevreden en wil je graag bedanken voor het meedenken.
 
;);) Nu gaat het helemaal automatisch

Code:
Private Sub PFD_opslaan_Click()

Dim FileName As String
Dim FolderPath As String            ' map E:\Documents\
Dim SubFolderPath1 As String     ' map E:\Documents\Jaar
Dim SubFolderPath2 As String     ' map E:\Documents\Jaar\maand\Bestandsnaam.pdf
Dim Maand As String                  ' maand rekening

Maand = Me.Maand2
FileName = Me.Betreft2 & " " & Me.KlantId
FolderPath = "E:\Documents\" & Me.JaarRek
SubFolderPath1 = FolderPath & "\" & Maand
SubFolderPath2 = SubFolderPath1 & "\" & FileName & ".PDF"
    
DoCmd.OutputTo acOutputReport, “Report”, acFormatPDF, SubFolderPath2
MsgBox "De rekening is als PDF opgeslagen in de map" & SubFolderPath1, vbInformation, "Klaar"

End Sub
 
Geweldige reacties allemaal,

Twee miunten voordat de mail binnenkwam dat er een reactie was op mijn vraag ben ik er achter gekomen wat ik fout heb gedaan.
Ik had
Code:
Me.jaar  &"\" & Me.maand
Als Me.jaar niet bestaat lukt het helemaal nooit. Vervolgens naam veranderd en werkt als een zonnentje
Hij slaat nu automatische alle raporten op in de map zoals ik het graag wil hebben.

Voor de volledigheid de werkende code.
Code:
Function FileExist(FileFullPath As String) As Boolean
    Dim value As Boolean
    value = False
    If Dir(FileFullPath) <> "" Then
        value = True
    End If
    FileExist = value
End Function
Private Sub Knop52_Click()

    
    Dim fileName As String, fldrPath As String, filePath As String
    Dim answer As Integer
    
    fileName = jaar & FactuurID & " " & Me.Naam & " " & postcodewoonplaats & " " & "factuur"                 'PDF Bestandsnaam*
    fldrPath = "C:\Users\jacwo\Documents\facturen\" & Me.jaren & "\" & Me.maand 'Map waar rapport wordt opgeslagen*"
    
    filePath = fldrPath & "\" & fileName & ".pdf"
    
    'Controle of bestand al is opgeslagen
    If FileExist(filePath) Then
        answer = MsgBox(prompt:="PDF Bestaat al: " & vbNewLine & filePath & vbNewLine & vbNewLine & _
                        "Moet het bestaande bestand worden vervangen?", buttons:=vbYesNo, Title:="Existing PDF File")
        If answer = vbNo Then Exit Sub
    End If
    
    On Error GoTo invalidFolderPath
    DoCmd.OutputTo objecttype:=acOutputReport, objectName:=Me.Name, outputformat:=acFormatPDF, outputFile:=filePath
    
    MsgBox prompt:="PDF opgeslagen als: " & vbNewLine & filePath, buttons:=vbInformation, Title:="Factuur geëxporteerd als PDF"
    Exit Sub
    
invalidFolderPath:
    MsgBox prompt:="Verkeerde map keuze.", buttons:=vbCritical
    
End Sub


Nogmaals bedankt
 
Nodeloos lange functie :)
Code:
Function FileExist(FileFullPath As String) As Boolean
    If Dir(FileFullPath) <> "" Then FileExist = True
End Function

En die functie is niet eens nodig:

Code:
Private Sub Knop52_Click()
Dim fileName As String, filePath As String
    
    fileName = jaar & FactuurID & " " & Me.Naam & " " & postcodewoonplaats & " " & "factuur"
    filePath = "C:\Users\jacwo\Documents\facturen\" & Me.jaren & "\" & Me.maand & "\" & fileName & ".pdf"
    If Dir(filePath) <> "" Then
        If MsgBox("PDF Bestaat al: " & vbNewLine & filePath & vbLf & vbLf & "Moet het bestaande bestand worden vervangen?", _
            vbYesNo, "Existing PDF File") = vbNo Then Exit Sub
    End If
    On Error GoTo invalidFolderPath
    DoCmd.OutputTo acOutputReport, Me.Name, acFormatPDF, filePath
    MsgBox "PDF opgeslagen als: " & vbLf & filePath, vbInformation, "Factuur geëxporteerd als PDF"
    Exit Sub
    
invalidFolderPath:
    MsgBox "Verkeerde map keuze.", vbCritical
    
End Sub
 
Super bedankt voor de inbreng. Hier kan ik wat mee.

bedankt voor de hulp die ik heb gekregen.
Scheelt uren werk per jaar.
 
Het opnemen van de parameternamen, wat jij doet in jouw code, mag best, maar is niet nodig. Eigenlijk doe ik dat alleen maar als ik (als er bijvoorbeeld 6 parameters zijn) er maar één of twee van gebruik. Voorbeeldje:
Code:
    DoCmd.OpenForm "Test", , , , acFormAdd, , "ArtiestID = " & cboArtiestID
en dit:
Code:
    DoCmd.OpenForm "Test", DataMode:=acFormAdd, OpenArgs:="ArtiestID = " & cboArtiestID
doen precies hetzelfde. Het tweede is wellicht iets leesbaarder, maar het eerste is een stuk compacter en in mijn ogen daardoor nog leesbaarder ook.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan