Access Rapport Exporteren naar PDF met Object/Bestandsnaam

Status
Niet open voor verdere reacties.

Robert971

Gebruiker
Lid geworden
6 jul 2012
Berichten
171
Graag zou ik een access rapport exporten naar een PDF met bestandsnaam. Het exporteren naar PDF gaat prima, alleen als ik op OK klik in het Windows dialoogvenster krijg ik een foutmelding.

Ben met de volgende code aan het knutselen:
Code:
Private Sub KnopExporterenPDF_Click
 
With CodeContextObject
DoCmd.OutputTo acOutputReport, Me.Tekst111 & "-" & Me.Off_Id, "PDFFormat(*.pdf)", "", True, "", , acExportQualityScreen
End With

End Sub

In het windows dialoogvenstertje komt nu door het samenvoegen van 2 velden, respectievelijk: Me.Tekst111 en Me.Off_Id, de juiste bestandsnaam voor de betreffende PDF te staan...Op het moment dat ik op Opslaan OK klik krijg ik de volgende foutmelding:
foutmelding.png

Ik heb het ook op een andere manier geprobeerd: bijv:
Code:
Dim Offertenummer As String

Offertenummer = Me.Tekst111 & "-" & Me.Off_Id

DoCmd.OutputTo acOutputReport, Offertenummer, acFormatPDF, , True

Helaas krijg ik ook hierbij een foutmelding in het dialoogvenster van windows

Iemand een idee hoe dit op te lossen?
 
Ik doe het via een knop op een formulier "frmHoofdmenu" en 3 tekstvelden dat ik de bestandsnaam van de PDF en de map waar ze komen te staan samenstel uit een jaartal, locatie (=bestandsnaam) en wedstrijdnaam en die PDF's dan hidden wegschrijf naar die map. De code na cijfer 1 herhaal ik zo voor 13 verschillende rapporten zodat je in één druk op de knop 13 verschillende rapporten hebt staan in je map.

Code:
    Dim myPath, dirname, voorwaarde As String
    Dim strReportName, stdocname, stWedstrijdjaar, stWedstrijdbestand, stWedstrijdnaam As String
    Dim stLinkCriteria As String
    Dim Opslagmap, Hyperlinkopslag As String
    Dim stDoc, Aantal As Integer
    
DoCmd.SetWarnings False

'naam, wedstrijdjaar ophalen uit bovenliggende form
    stWedstrijdjaar = [Forms]![frmHoofdmenu].TxtJaartal.Value
    stWedstrijdbestand = [Forms]![frmHoofdmenu].TxtBestandsnaam.Value
    If [Forms]![frmHoofdmenu].TxtWedstrijdnaam.Value <> vbNullString Then
        stWedstrijdnaam = [Forms]![frmHoofdmenu].TxtWedstrijdnaam.Value
    Else
        stWedstrijdnaam = ""
    End If

'controleren of de map van die wedstrijd al bestaat, zoniet map aanmaken
    dirname = GetPath & "\data\Internet\verslagen2002\pdffiles\" & stWedstrijdjaar & "\" & stWedstrijdbestand & "" & stWedstrijdjaar
    DoCmd.SetWarnings False
    If Dir(dirname, vbDirectory) = "" Then MkDir dirname
    DoCmd.SetWarnings False
    Opslagmap = GetPath & "\data\Internet\verslagen2002\pdffiles\" & stWedstrijdjaar & "\" & stWedstrijdbestand & "" & stWedstrijdjaar
    DoCmd.SetWarnings False
    myPath = GetPath & "\data\Internet\verslagen2002\pdffiles\" & stWedstrijdjaar & "\" & stWedstrijdbestand & "" & stWedstrijdjaar
'PDF Rapporten hidden aanmaken en wegschrijven
    DoCmd.SetWarnings False
1   stdocname = "rptDeelnemers_Kolom_Numeriek"
    DoCmd.OpenReport stdocname, acViewReport, , stLinkCriteria, acHidden
    If [Forms]![frmHoofdmenu].TxtWedstrijdnaam.Value <> vbNullString Then
        strReportName = stWedstrijdbestand & "" & stWedstrijdjaar & "_" & stWedstrijdnaam & "_dln"
    Else
        strReportName = stWedstrijdbestand & "" & stWedstrijdjaar & "_dln"
    End If
    DoCmd.OutputTo acOutputReport, stdocname, acFormatPDF, Opslagmap & "\" & strReportName & ".pdf", False
    DoCmd.Close acReport, stdocname

Je hebt nog een functie Getpath nodig die je ergens in een module giet.
Code:
Function GetPath()
   'Retourneert de huidige bestandslocatie van de database
    GetPath = CurrentProject.Path
      
End Function
 
Werkt top, bedankt voor je uitgebreide reactie!
Vraag is opgelost.
 
@Johan:
Je code zit een beetje té ingewikkeld in elkaar, en is nogal ongelukkig in zijn declaraties. Om met het laatste te beginnen:
Code:
Dim myPath, dirname, voorwaarde As String
Dim strReportName, stdocname, stWedstrijdjaar, stWedstrijdbestand, stWedstrijdnaam As String
Dim stLinkCriteria As String
Dim Opslagmap, Hyperlinkopslag As String
Dim stDoc, Aantal As Integer
In al deze declaraties is alleen de laatste variabel specifiek gedeclareerd. De rest niet, en die zijn dus allemaal (onnodig) als Variant gedeclareerd. Het zou dus zo moeten, op basis van je code:
Code:
Dim myPath As String, dirName As String, Voorwaarde As String
Dim strReportName As String, stWedstrijdbestand As String, stWedstrijdnaam As String
Dim stLinkCriteria As String, stDoc As String, stDocName As String
Dim Opslagmap As String, Hyperlinkopslag As String
Dim Aantal As Integer, iWedstrijdjaar As Integer

Verder heb je een functie gemaakt die nergens voor nodig is:
Code:
    myPath = CurrentProject.Path & "\data\Internet\verslagen2002\pdffiles\" & iWedstrijdjaar & "\" & stWedstrijdbestand & "" & iWedstrijdjaar
Verder verwijs je nodeloos naar je formulier:
Code:
    iWedstrijdjaar = Me.TxtJaartal.Value
    stWedstrijdbestand = Me.TxtBestandsnaam.Value
    If Me.TxtWedstrijdnaam.Value <> vbNullString Then stWedstrijdnaam = Me.TxtWedstrijdnaam.Value
De IF die je gebruikt hoeft geen Else te hebben, want een variabele die je declareert is per definitie leeg. En blijft dus leeg als niet aan de voorwaarde is voldaan.
Je herhaalt om de regel de Setwarnings regel. Nergens voor nodig, één keer is meer dan voldoende. Gek genoeg mis ik de belangrijkste: het weer aanzetten van Setwarnings!
Code:
    DoCmd.SetWarnings False
    If Dir(dirName, vbDirectory) = "" Then MkDir dirName
    Opslagmap = GetPath & "\data\Internet\verslagen2002\pdffiles\" & iWedstrijdjaar & "\" & stWedstrijdbestand & "" & iWedstrijdjaar
    myPath = GetPath & "\data\Internet\verslagen2002\pdffiles\" & iWedstrijdjaar & "\" & stWedstrijdbestand & "" & iWedstrijdjaar
    stDocName = "rptDeelnemers_Kolom_Numeriek"
    DoCmd.OpenReport stDocName, acViewReport, , stLinkCriteria, acHidden
    If Me.TxtWedstrijdnaam.Value <> vbNullString Then
        strReportName = stWedstrijdbestand & "" & iWedstrijdjaar & "_" & stWedstrijdnaam & "_dln"
    Else
        strReportName = stWedstrijdbestand & "" & iWedstrijdjaar & "_dln"
    End If
    DoCmd.OutputTo acOutputReport, stDocName, acFormatPDF, Opslagmap & "\" & strReportName & ".pdf", False
    DoCmd.Close acReport, stDocName
    DoCmd.SetWarnings True
@Robert:
Ik zou mijn aanbevelingen in ieder geval overnemen :).
 
Michel,

dat was slechts een copy-paste uit een wat uitgebreider zaakje
 
Neemt niet weg dat je variabelen inefficiënt (en niet consequent) declareert, en een functie hebt gemaakt die niet nodig is :)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan