vanuit formulier rapport uitvoeren

  • 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
Ik heb een keuze formulier vanwaar ik een rapport open. Rapport is gebaseerd op een Query. (knop aangestuurd door een macro)
Het rapport wordt juist geopend. Nu druk ik op een knop in een Rapport, vervolgens wordt de procedure uitgevoerd en wordt het rapport opgeslagen als PDF op de PC in de juiste map, vervolgens wordt het rapport gesloten en kom ik weer in het formulier terrecht.

Beide knoppen werken dus goed. Ik heb vanalles geprobeerd, om die twee knoppen te combineren zodat ik maar één knop hoef in te drukken om bovenstaande uit te voeren, echter het lukt mij niet om het commande van rapport oppenen op de juiste plek in de procedure te zetten.

CODE in Rapport:
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
    
    
   DoCmd.Close acReport, "Factuur serie"
    Exit Sub
    
invalidFolderPath:
    MsgBox prompt:="Verkeerde map keuze.", buttons:=vbCritical
    
    
End Sub

Code omgebouwd naar procedure in formulier
Code:
'------------------------------------------------------------
' Macro2
'
'------------------------------------------------------------
Function Macro2()
On Error GoTo Macro2_Err

    DoCmd.openreport "Factuur serie", acViewReport, "", "", acNormal


Macro2_Exit:
    Exit Function

Macro2_Err:
    MsgBox Error$
    Resume Macro2_Exit

End Function

Vraag beknopt: Hoe kan ik beide codes zo samenvoegen dat door één druk op de knop beide codes worden uitgevoerd.
Is er dan ook een optie dat het volgend RECORD in het formulier wordt weergegeven?

BVD JacW
 
Probeer eens:

zet eerst de code van de functie FileExist in een nieuwe globale module. Dan kan je die code vanop elke plaats in je applicatie oproepen. Je hoeft het rapport zelf niet te openen.
Dan kan de volgende code verzamelen onder de OnClick event van je knop:
Code:
    Dim fileName As String, fldrPath As String, filePath As String
    Dim answer As Integer
    Dim strReport as string
   
    strReport  = "Factuur serie"


    fileName = jaar & Factuurid & " " & strReport & " " & 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:=strReport, outputformat:=acFormatPDF, outputFile:=filePath
    DoCmd.GoToRecord acNext  'air-tested code: hier moet je nog eens de syntax van checken

verwijder dan de code uit het rapport.
 
Soms vraag je je af waarom je nog helpt... In een ander draadje gaf ik je een keurige korte code, waarop je reageerde met
Super bedankt voor de inbreng. Hier kan ik wat mee. ... Scheelt uren werk per jaar.
En nu zie ik in een andere vraag je oorspronkelijke slordige code gewoon weer terug komen. Blijkbaar heb je heel veel uren over . Je neemt me vast niet kwalijk dat ik mijn antwoord baseer op mijn eigen code, en niet die van jou.


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, "FactuurRapport", acFormatPDF, filePath
    DoCmd.GoToRecord acNext
    Exit Sub
    
invalidFolderPath:
    MsgBox "Verkeerde map keuze.", vbCritical
    
End Sub


En ondanks de tip van noella: je hebt de functie FileExist niet nodig.
Code:
    If Dir(filePath) <> "" Then
    If FileExist(filePath) Then
Zoals je ziet, is de tekst van het aanroepen van de functie net zo lang als het aanroepen van de opdracht die je vervolgens aanroept. Leg eens uit waar dáár de winst zit?
 
Bedankt en verdorie,
Ik zie dat ik het verkeerde kladblok bestand heb verzonden en dan ik de nette korte code wel zelf gebruik.
Dat gebeurt als idd als er te veel bestanden open staan op de pc en je niet de oude afsluit.
Ik wardeer het werk en de inzet die jullie inbrengen in Helpmij ontzettend, aangezien ik geen kaas heb gegeten van VBA.
Nogmaals bedankt.
 
Kan gebeuren :). Zolang de uiteindelijke code correct werkt, is het uiteraard prima :).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan